zoukankan      html  css  js  c++  java
  • zzuli 2179 最短路

    2179: 紧急营救

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 89  Solved: 9

    SubmitStatusWeb Board

    Description

    冷锋在非洲完成任务后回到了狼牙特种作战部队。我们知道在战狼二结尾,冷锋正在北极执行任务,而部队发现了龙小云在c国的消息,让冷锋尽快赶往c国。我们知道现在地球上共有n个国家和地区,编号分别为1,2,3...n。国家与国家之间的可能通航班(可能不止一次),也可能没有通航班。共有m次航班,冷锋已经知道了这m次航班的信息(起点 终点,时间)北极的编号是1,c国的编号是n。
    而冷峰身为超级英雄一样的的存在,他有一次将航班的时间降为零的能力。

    Input

    样例数t(t<=10),接下来又t组样例。 每组样例先输入n , m(n<=1000 , m<=n*(n-1)/2)。

    下面m行航班的信息,分别为start , end , time(time <= 100000).

    Output

    对每组样例,输出冷锋到达c国的最短时间,若不能到达输出 "Impossible"。

    Sample Input

    3 3 1 1 2 1 4 3 1 2 4 2 3 1 2 4 4 3 3 1 2 100000 2 3 1 1 3 2

    Sample Output

    Impossible 4 0
    不知道是我语文没学好还是怎么着,题目描述的显然是有向图竟然改成无向图才能A,真是醉了= =
    如果是无向图需要反向建边,不过无向得话就不必要了,跑两次最短路,分别以1和N为起点,然后枚举每一条边为零,看看是否能更新这条1-N的最短路。
     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语句!!!
  • 相关阅读:
    Sprinig.net 双向绑定 Bidirectional data binding and data model management 和 UpdatePanel
    Memcached是什么
    Spring.net 网络示例 codeproject
    jquery.modalbox.show 插件
    UVA 639 Don't Get Rooked
    UVA 539 The Settlers of Catan
    UVA 301 Transportation
    UVA 331 Mapping the Swaps
    UVA 216 Getting in Line
    UVA 10344 23 out of 5
  • 原文地址:https://www.cnblogs.com/zzqc/p/7394064.html
Copyright © 2011-2022 走看看