1649 齊頭並進
codeforces
基準時間限制:1 秒 空間限制:131072 kb 分值: 10
難度:2級演算法題
在乙個叫奧斯汀的城市,有n個小鎮(從1到n編號),這些小鎮通過m條雙向火車鐵軌相連。當然某些小鎮之間也有公路相連。為了保證每兩個小鎮之間的人可以方便的相互訪問,市長就在那些沒有鐵軌直接相連的小鎮之間建造了公路。在兩個直接通過公路或者鐵路相連的小鎮之間移動,要花費乙個小時的時間。
現在有一輛火車和一輛汽車同時從小鎮1出發。他們都要前往小鎮n,但是他們中途不能同時停在同乙個小鎮(但是可以同時停在小鎮n)。火車只能走鐵路,汽車只能走公路。
現在請來為火車和汽車分別設計一條線路;所有的公路或者鐵路可以被多次使用。使得火車和汽車盡可能快的到達小鎮n。即要求他們中最後到達小鎮n的時間要最短。輸出這個最短時間。(最後火車和汽車可以同時到達小鎮n,也可以先後到達。)
樣例解釋:
在樣例中,火車可以按照 1⟶
3⟶4 行駛,汽車 1⟶
2⟶4 按照行駛,經過2小時後他們同時到過小鎮4。
input
單組測試資料。output第一行有兩個整數n 和 m (2≤n≤400, 0≤m≤n*(n-1)/2) ,表示小鎮的數目和鐵軌的數目。
接下來m行,每行有兩個整數u 和 v,表示u和v之間有一條鐵路。(1≤u,v≤n, u≠v)。
輸入中保證兩個小鎮之間最多有一條鐵路直接相連。
輸出乙個整數,表示答案,如果沒有合法的路線規劃,輸出-1。input示例
4 2output示例 21 33 4
#include#include#include#include#define inf 0x3f3f3f3f
using namespace std;
const int maxn = 440;
int n,m;
int map[maxn][maxn],dis[maxn],vis[maxn];
int map1[maxn][maxn],dis1[maxn],vis1[maxn];
void dijkstra(int st)
vis[st] = 1;dis[st] = 0;
int pos = st;
for(int i = 1;i<=n-1;i++)
} int v,minn = inf;
for(int j = 1;j<=n;j++)
} vis[v] = 1;
pos = v; }}
void dijkstra1(int st)
vis1[st] = 1;dis1[st] = 0;
int pos = st;
for(int i = 1;i<=n-1;i++)
} int v,minn = inf;
for(int j = 1;j<=n;j++)
} vis1[v] = 1;
pos = v; }}
int main()
if(m == 0)
else if(m==n*(n-1)/2)
for(int i = 1;i<=n;i++)
} }dijkstra(1);
dijkstra1(1);
if(dis1[n] == inf || dis[n] == inf) printf("-1\n");
else printf("%d\n",max(dis[n],dis1[n]));
return 0;
}/***test1
input
5 54 2
3 54 5
5 11 2
output
3-------------
test2
input
20 0
output
-1----------------
test3
input
3 11 2
output
-1****************/
51Nod 1649 齊頭並進
1649 齊頭並進 codeforces 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 在乙個叫奧斯汀的城市,有n個小鎮 從1到n編號 這些小鎮通過m條雙向火車鐵軌相連。當然某些小鎮之間也有公路相連。為了保證每兩個小鎮之間的人可以方便的相互訪問,市長就在那些沒有...
51nod 1649 齊頭並進
1649 齊頭並進 現在有一輛火車和一輛汽車同時從小鎮1出發。他們都要前往小鎮n,但是他們中途不能同時停在同乙個小鎮 但是可以同時停在小鎮n 火車只能走鐵路,汽車只能走公路。現在請來為火車和汽車分別設計一條線路 所有的公路或者鐵路可以被多次使用。使得火車和汽車盡可能快的到達小鎮n。即要求他們中最後到...
51nod1649齊頭並進
1649 齊頭並進 基準時間限制 1 秒 空間限制 131072 kb 分值 10 難度 2級演算法題 在乙個叫奧斯汀的城市,有n個小鎮 從1到n編號 這些小鎮通過m條雙向火車鐵軌相連。當然某些小鎮之間也有公路相連。為了保證每兩個小鎮之間的人可以方便的相互訪問,市長就在那些沒有鐵軌直接相連的小鎮之間...