zoukankan      html  css  js  c++  java
  • CodeForcesGym 100753E Change of Scenery

    Change of Scenery

    Time Limit: 10000ms
    Memory Limit: 262144KB
    This problem will be judged on CodeForcesGym. Original ID: 100753E
    64-bit integer IO format: %I64d      Java class name: (Any)
     
    解题:最短路
     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 typedef pair<int,int> pii;
     4 const int maxn = 10010;
     5 struct arc{
     6     int to,cost,next;
     7     arc(int x = 0,int y = 0,int z = -1){
     8         to = x;
     9         cost = y;
    10         next = z;
    11     }
    12 }e[2010000];
    13 int head[maxn],cnt[maxn],d[maxn],tot,N,M,K;
    14 void add(int u,int v,int w){
    15     e[tot] = arc(v,w,head[u]);
    16     head[u] = tot++;
    17 }
    18 priority_queue<pii,vector<pii>,greater<pii>>q;
    19 bool done[maxn];
    20 void dijkstra(){
    21     while(!q.empty()) q.pop();
    22     memset(d,0x3f,sizeof d);
    23     memset(cnt,0,sizeof cnt);
    24     q.push(pii(d[1] = 0,cnt[1] = 1));
    25     while(!q.empty()){
    26         int u = q.top().second;
    27         q.pop();
    28         if(done[u]) continue;
    29         done[u] = true;
    30         for(int i = head[u]; ~i; i = e[i].next){
    31             if(d[e[i].to] > d[u] + e[i].cost){
    32                 d[e[i].to] = d[u] + e[i].cost;
    33                 cnt[e[i].to] = cnt[u];
    34                 q.push(pii(d[e[i].to],e[i].to));
    35             }else if(d[e[i].to] == d[u] + e[i].cost)
    36                 cnt[e[i].to]++;
    37         }
    38     }
    39 }
    40 int main(){
    41     int x,u,v,w;
    42     while(~scanf("%d%d%d",&N,&M,&K)){
    43         memset(head,-1,sizeof head);
    44         while(K--) scanf("%d",&x);
    45         for(int i = tot = 0; i < M; ++i){
    46             scanf("%d%d%d",&u,&v,&w);
    47             add(u,v,w);
    48             add(v,u,w);
    49         }
    50         dijkstra();
    51         puts(cnt[N] > 1?"yes":"no");
    52     }
    53     return 0;
    54 }
    55 /*
    56 3 3 3
    57 1 2 3
    58 1 2 1
    59 2 3 2
    60 1 3 3
    61 4 5 2
    62 1 4
    63 1 2 2
    64 2 4 1
    65 1 3 1
    66 3 4 2
    67 1 4 2
    68 */
    View Code
  • 相关阅读:
    CCF NOI1121 逆波兰表达式
    Vijos P1217 乒乓球【模拟+输入输出】
    Vijos P1304 回文数【回文+进制】
    NUC1041 数字三角形【DP】
    CCF NOI1070 汉诺塔游戏
    CCF NOI1069 分解因数
    CCF NOI1149 N皇后问题
    CCF NOI1153 素数环
    CCF NOI1170 质因数分解
    POJ NOI MATH-7832 最接近的分数
  • 原文地址:https://www.cnblogs.com/crackpotisback/p/4856144.html
Copyright © 2011-2022 走看看