kuangbin帶你飛 專題四 最短路練習 R

2021-07-25 16:55:38 字數 2074 閱讀 2068

hdu 4370 0 or 1(最短路)

這是整套裡面我覺得最有意思的一道最短路,也確實讓我覺得我與真正acmer之間的距離還是很大的

problem description

given a n*n matrix cij (1<=i,j<=n),we want to find a n*n matrix xij (1<=i,j<=n),which is 0 or 1.

besides,xij meets the following conditions:

1.x12+x13+…x1n=1

2.x1n+x2n+…xn-1n=1

3.for each i (1in), satisfies ∑xki (1<=k<=n)=∑xij (1<=j<=n).

for example, if n=4,we can get the following equality:

x12+x13+x14=1

x14+x24+x34=1

x12+x22+x32+x42=x21+x22+x23+x24

x13+x23+x33+x43=x31+x32+x33+x34

now ,we want to know the minimum of ∑cij*xij(1<=i,j<=n) you can get.

給你乙個n*n的矩陣,然後讓咱們構造另乙個n*n的矩陣,構造的矩陣有如下要求,

1.x12+x13+…x1n=1.

2.x1n+x2n+…xn-1n=1.

3.for each i (1 i n), satisfies ∑xki (1<=k<=n)=∑xij (1<=j<=n).

額。。這個題解寫著好虛啊,畢竟不是自己想的。

究竟怎麼就是最短路了呢?

首先啊,如果每行的數字都縮成乙個點,且如果x(i,j) = 1 那麼我們連邊i->j,如果是0的話,乘cij之後和沒有是一樣的,所以不管他,那麼 連邊i->j什麼意思呢?

第三個條件是,第i行的x和等於第i列x和對吧,那麼從i出去多少條邊就是第i行多少個1 ,也就是第i行的和,換句話說:i點的出度就是∑xij 。

那麼當x(i,j)=1時,第j列是不是出現了乙個1?也就是說第j列的和:+1了。連邊所以的i->j後,就是所有第幾行第j列是1了,點j的入度自然就是第j列的和。

那麼第三個條件就是: 2~n-1這些節點,滿足:入度 = 出度!

第二個條件是 :n號節點的入度為1

第乙個條件: 1號節點的出度為1

然後基於這個思想,每個邊權值為c(i,j)

1->n的最短路就是答案,x為0的就是不選的邊,下= 1的就是選的邊,邊的選擇就交給最短路了,

這個時候,我又錯了。。。

只考慮1->n是不行的,因為可能1->..->1中間沒有n和n ->…->n這兩個路放在一起是最小的,那麼單純的最短路就不對了咯。我們需要搞兩種,在比較一下就好了,這個的處理就是之前的dist先為無窮,所以1直接可達的點放佇列,dijstra一下,就可以球出來1->1 1->n的最短路了,那麼n->n呢?

我是選擇了在乙個dij,然後就ac了==

#include 

#include

#include

#include

#include

using

namespace

std;

const

int maxn = 300*300+10;

const

int maxm = 1e6+10;

int n,tot,head[maxn],dist[maxn],dis[maxn];

typedef pairpii;

priority_queuevector

,greater>q,p;

struct nodeedges[maxm];

void add(int u,int v,int w)

void init()

if(i == n&&j!=n)}}

}void dij()}}

}void di()}}

}void sov()

int main()

}

kuangbin帶你飛專題

kuangbin帶你飛 專題一 簡單搜尋 kuangbin帶你飛 專題二 搜尋高階 kuangbin帶你飛 專題三 dancing links kuangbin帶你飛 專題四 最短路練習 kuangbin帶你飛 專題五 並查集 kuangbin帶你飛 專題六 最小生成樹 kuangbin帶你飛 專題...

kuangbin帶你飛 專題四 最短路練習 G

題意 資訊傳輸,總共有n個傳輸機,先要從1號傳輸機向其餘n 1個傳輸機傳輸資料,傳輸需要時間,給出乙個嚴格的下三角 其實就是對角線之下的不包括對角線的部分 時間矩陣,a i j 代表從i向j傳輸資料需要的時間,並規定資料傳輸之間並無影響,即第乙個傳輸機可以同時向其餘傳輸機傳輸資料。求所有傳輸任務所需...

kuangbin帶你飛 專題十八 字尾陣列

寫了好久才把字尾陣列的專題寫完 字尾陣列就是對字串的所有字尾來搞事,通過對這些字尾排序,來得到這些字尾之前存在的關係。字尾陣列中的sa陣列 排名陣列 和height 相鄰排名lcp 有很多很有用的特性,使得在處理一些字串問題的時候很給力,比較流行的求字尾陣列的演算法有o nlogn 的倍增求法和o ...