hdu 4370(最短路)
題意:給了一個n*n的矩陣,我們需要構造另一個矩陣滿足以下要求
1.X 12+X 13+...X 1n=1
2.X 1n+X 2n+...X n-1n=1
3.for each i (1<i<n), satisfies ∑X ki (1<=k<=n)=∑X ij (1<=j<=n).
For example, if n=4,we can get the following equality:
X 12+X 13+X 14=1
X 14+X 24+X 34=1
X 12+X 22+X 32+X 42=X 21+X 22+X 23+X 24
X 13+X 23+X 33+X 43=X 31+X 32+X 33+X 34
Now ,we want to know the minimum of ∑C ij*X ij(1<=i,j<=n) you can get.
思路:這題的轉換相當的神奇,如何構造這個01矩陣呢。如果往圖論上想,就能看出這裡面是個最短路。
這三個條件:
1、1節點的出度為1
2、n節點的初度為1
3、2~n-1的入度等於出度
還要注意的是環的情況。
從1出發回到1的花費記為c1,從n出發回到n的花費記為c2;
ans = min(c,c1+c2);
#include <iostream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int inf = 0x3f3f3f3f;
const int maxn = 310;
int cost[maxn][maxn];
int n;
int d[maxn];
int vis[maxn];
void spfa(int s)
{
memset(vis,0,sizeof(vis));
memset(d,inf,sizeof(d));
queue<int>q;
for(int i = 1; i <= n; i++)
{
if(i==s)
continue;
d[i] = cost[s][i];
vis[i] = 1;
q.push(i);
}
while(!q.empty())
{
int u = q.front();
q.pop();
vis[u] = 0;
for(int i = 1; i <= n; i++)
{
int v = i;
if(d[v]>d[u]+cost[u][v])
{
d[v] = d[u]+cost[u][v];
if(!vis[v])
{
vis[v] = 1;
q.push(v);
}
}
}
}
}
int main()
{
while(~scanf("%d",&n))
{
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
scanf("%d",&cost[i][j]);
spfa(1);
int ans = d[n];
int c1 = d[1];
spfa(n);
int c2 = d[n];
if(ans>c1+c2)
ans = c1 + c2;
printf("%d\n",ans);
}
return 0;
}
相關文章
- 最短路:求最長最短路
- 最短路 || 最長路 || 次短路
- HDU - 3790 (雙標準限制最短路徑)最短路徑問題
- hdu6007 Mr. Panda and Crystal (最短路+完全揹包)
- HDU 1754 I Hate It (線段樹 區間最值)
- hdu 2111 Saving HDU (DP)
- 最短路
- 次短路
- 最大值(最短路+最短路計數)
- Shape of HDU
- HDU 3349
- HDU 2052(C語言+註釋)+HDU 2090C語言
- 2024_4_22 路徑花費為最長$k$條邊之和最短路
- 最短路-Floyd
- 簡單的揹包問題(入門)HDU2602 HDU2546 HDU1864
- HDU 1240 Asteroids!AST
- hdu2083
- hdu5532
- HDU4787
- hdu5540
- HDU 4921 Map
- HDU 3661 Assignments
- hdu 6415 - DP
- 最短路專項
- 擴點最短路
- 最短路之Dijkstra
- 最短路圖論圖論
- 6.4.2最短路徑
- 圖 - 最短路徑
- JavaScript短路表示式JavaScript
- Small Multiple(最短路)
- 單源最短路徑:最短路徑性質的證明
- HDU 1729 Stone GameGAM
- HDU 3590 PP and QQ
- HDU 2570 迷瘴
- hdu1069javaJava
- hdu1025javaJava
- HDU Find the hotel(RMQ)MQ