冷锋在非洲完成任务后回到了狼牙特种作战部队。我们知道在战狼二结尾,冷锋正在北极执行任务,而部队发现了龙小云在c国的消息,让冷锋尽快赶往c国。我们知道现在地球上共有n个国家和地区,编号分别为1,2,3...n。国家与国家之间的可能通航班(可能不止一次),也可能没有通航班。共有m次航班,冷锋已经知道了这m次航班的信息(起点
终点,时间)北极的编号是1,c国的编号是n。
而冷峰身为超级英雄一样的的存在,他有一次将航班的时间降为零的能力。
标签:能力 span sam 题目 fine 没有 sample 不必要 output
样例数t(t<=10),接下来又t组样例。 每组样例先输入n , m(n<=1000 , m<=n*(n-1)/2)。
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define LL long long 4 #define inf 0x3f3f3f3f 5 const int maxn=1005; 6 struct Edge{int u,v,w;}; 7 vector<Edge>G[maxn]; 8 int d1[1005],d2[1005]; 9 void spfa(int s,int *d) 10 { 11 bool vis[1005]; 12 memset(vis,0,sizeof(vis)); 13 memset(d,inf,sizeof(int)*1001); 14 queue<int>Q; 15 Q.push(s); 16 vis[s]=1; 17 d[s]=0; 18 while(!Q.empty()){ 19 int u=Q.front(); Q.pop(); 20 vis[u]=0; 21 for(int i=0;i<G[u].size();++i){ 22 Edge x=G[u][i]; 23 if(d[x.v]>d[u]+x.w){ 24 d[x.v]=d[u]+x.w; 25 if(!vis[x.v]){ 26 vis[x.v]=1; 27 Q.push(x.v); 28 } 29 } 30 } 31 } 32 } 33 int main() 34 { 35 //freopen("in.txt","r",stdin); 36 int T,N,M,i,j,k; 37 int u,v,w; 38 cin>>T; 39 while(T--){ 40 scanf("%d%d",&N,&M); 41 for(i=0;i<M;++i){ 42 scanf("%d%d%d",&u,&v,&w); 43 G[u].push_back(Edge{u,v,w}); 44 G[v].push_back(Edge{v,u,w}); 45 } 46 spfa(1,d1); 47 spfa(N,d2); 48 int ans=inf; 49 for(i=1;i<=N;++i) 50 { 51 for(j=0;j<G[i].size();++j) 52 { 53 ans=min(ans,d1[i]+d2[G[i][j].v]); 54 } 55 } 56 for(i=0;i<=N;++i) G[i].clear(); 57 if(ans==inf) puts("Impossible"); 58 else cout<<ans<<endl; 59 } 60 return 0; 61 } 62 //注释freopen语句!!!
标签:能力 span sam 题目 fine 没有 sample 不必要 output
原文地址:http://www.cnblogs.com/zzqc/p/7394064.html