SFPA求非自環閉環的最短路

2021-08-11 06:39:13 字數 1619 閱讀 3446

題目大意:

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

besides,x ij meets the following conditions: 

1.x 12+x 13+...x 1n=1 

2.x 1n+x 2n+...x n-1n=1 

3.for each i (1hint

for sample, x 12=x 24=1,all other x ij is 0. 

input

the input consists of multiple test cases (less than 35 case). 

for each test case ,the first line contains one integer n (1output

for each case, output the minimum of ∑c ij*x ij you can get. 

sample input

4

1 2 4 10

2 0 1 1

2 2 0 5

6 3 1 2

sample output

3
思路就不細說了,**網上解釋:

此題非常厲害,就演算法來說不是很難,但很考想法。這題的精髓在於如何將條件抽象出來,並建圖。

三個條件分別告訴我們 點1的出度為1,點n的入度為1,每個點的入度等於出度,這樣就可以構圖了。設n各點,將∑cij*xij(1<=i,j<=n)看成n各點的鄰接矩陣。這時問題分成了兩種情況。

第一種是求1到n的最短路徑,第二種是求1到1的非自環閉環 + n到n的非自環閉環的和。比較這兩種情況,取最小的值為解。

用spfa時設d[s]的值為inf,讓d[s]的相鄰節點入棧,這樣保證了可以取到非自環閉環。

**:

#include #include #include #include #include #include #include #include #include#include #include #include #include #define ri(n) scanf("%d",&n)

#define oi(n) printf("%d\n",n)

#define rl(n) scanf("%lld",&n)

#define ol(n) printf("%lld\n",n)

#define rep(i,l,r) for(i=l;i<=r;i++)

#define rep1(i,l,r) for(i=l;ip;

while(!p.empty())

p.pop();

for(int i=1; i<=n; i++)

else

}//vis[s]=1;

// c[s]++;

//d[s]=0;

while(!p.empty())

}//}}}

//return true;

}int main()

return 0;

}

最短路 求最長最短路,求最短路的路徑

hdu 1595 find the longest of the shortest include include include include include include include include include include include include include defi...

求單源的最短路徑

用鄰接表的方法儲存網 include include include include define inf 0x3f3f3f define node max 20 using namespace std vector path node max 儲存路徑 int d node max 儲存路徑長度 ...

poj 1125 求起點的最短路

題意 有n個人每個人可以把謠言傳給一些人,傳給每個人有一定的時間,求出你把謠言傳給誰,讓所有的人都知道的時間最短。思路 列舉每個點為起點,到所有點的距離的最大值就是該點為起點所消耗的時間,求出最小值就可以了,因為給的n較小,直接 floyd就可以了。include includeconst int ...