• HDU4360(spfa)


    http://acm.hdu.edu.cn/showproblem.php?pid=4360

     1 #include <iostream>
     2 #include <vector>
     3 #include <queue>
     4 #include <cstdio>
     5 using namespace std;
     6 const long long inf = 1ll<<57;
     7 const int Ni = 1320*2;
     8 struct node{
     9     int v,w,e;
    10     node(){}
    11     node(int a,int b,int c) {v=a;w=b;e=c;}
    12 };
    13 struct qnode{
    14     int v,e;
    15     qnode(){}
    16     qnode(int a,int b) {v=a;e=b;}
    17 };
    18 vector<node> eg[Ni];
    19 long long d[Ni][4];
    20 int num[Ni][4];
    21 bool vis[Ni][4];
    22 int n,m;
    23 void spfa(int s)
    24 {
    25     int i,j;
    26     for(i=1;i<=n;i++)
    27         for(j=0;j<=3;j++)
    28             d[i][j]=inf,num[i][j]=0,vis[i][j]=0;
    29     queue<qnode> q;
    30     int el=3,er;
    31     d[s][el]=0;
    32     vis[s][el]=1;
    33     q.push(qnode(s,el));
    34     while(!q.empty())
    35     {
    36         qnode qn=q.front(); q.pop();
    37         int u=qn.v;
    38         el=qn.e;vis[u][el]=0;
    39         for(i=0;i<eg[u].size();i++)
    40         {
    41             node nd=eg[u][i];
    42             int v=nd.v,w=nd.w;
    43             er=nd.e;
    44             if((el+1)%4==er&&(d[u][el]+w<d[v][er]||d[v][er]==0))
    45             {
    46                 d[v][er]=d[u][el]+w;
    47                 num[v][er]=num[u][el];
    48                 if(er==3) num[v][er]++;
    49                 if(!vis[v][er])
    50                 {
    51                     q.push(qnode(v,er));
    52                     vis[v][er]=1;
    53                 }
    54             }
    55             else if((el+1)%4==er&&(d[u][el]+w==d[v][er]||d[v][er]==0)&&num[u][el]>=num[v][er])
    56             {
    57                 num[v][er]=num[u][el];
    58                 if(er==3) num[v][er]++;
    59 
    60                 if(!vis[v][er])
    61                 {
    62                     q.push(qnode(v,er));
    63                     vis[v][er]=1;
    64                 }
    65             }
    66         }
    67     }
    68 }
    69 int main()
    70 {
    71     int t,cs=1;
    72     char str[5];
    73     int u,v,w;
    74     node nd;
    75     cin>>t;
    76     while(t--)
    77     {
    78         scanf("%d%d",&n,&m);
    79         for(int i=1;i<=n;i++) eg[i].clear();
    80         while(m--)
    81         {
    82             scanf("%d%d%d%s",&u,&v,&w,str);
    83             int e;if(str[0]=='L') e=0;
    84             else if(str[0]=='O') e=1;
    85             else if(str[0]=='V') e=2;
    86             else e=3;
    87             eg[u].push_back(node(v,w,e));
    88             eg[v].push_back(node(u,w,e));
    89         }
    90         spfa(1);
    91         if(d[n][3]!=inf&&d[n][3]!=0)
    92         printf("Case %d: Cute Sangsang, Binbin will come with a donkey after travelling %I64d meters and finding %d LOVE strings at last.\n",cs++,d[n][3],num[n][3]);
    93         else
    94         printf("Case %d: Binbin you disappoint Sangsang again, damn it!\n",cs++);
    95     }
    96     return 0;
    97 }


    测试数据:

    3
    5 5
    1 2 1 L
    2 3 1 O
    3 4 1 V
    4 5 2 E
    4 5 1 E
    1 4
    1 1 1 L
    1 1 1 O
    1 1 1 V
    1 1 1 E
    9 12
    1 3 2 L
    3 5 2 O
    5 7 2 V
    7 9 2 E
    1 2 1 L
    2 3 1 O
    3 4 1 V
    4 5 1 E
    5 6 1 L
    6 7 1 O
    7 8 1 V
    8 9 1 E
    ans:
    4 1
    4 1
    8 2

  • 相关阅读:
    python死磕一之数据结构和基础库
    常见IO模型
    如何在WS系统的DOS命令台打印JAVA_HOME变量
    windows下安装elasticsearch
    Windows系统设置临时环境变量
    20181130一些关键词
    自动化测试之路
    根据IP获取IP定位
    Servlet(汇聚页)
    软件工具(汇聚页)
  • 原文地址:https://www.cnblogs.com/qijinbiao/p/2640719.html
Copyright © 2020-2023  润新知