zoukankan      html  css  js  c++  java
  • 1934. Black Spot(spfa)

    1934

    水题 RE了N久  后来发现是无向图

      1 #include <iostream>
      2 #include<cstring>
      3 #include<algorithm>
      4 #include<stdlib.h>
      5 #include<vector>
      6 #include<cstdio>
      7 #include<queue>
      8 using namespace std;
      9 #define N 2000010
     10 #define INF 0xfffffff
     11 struct node
     12 {
     13     int u,v,next;
     14     double w;
     15 }ed[N<<1];
     16 int t,head[N],vis[N],dis[N],pa[N],o[N];
     17 double p[N];
     18 int n,m;
     19 void init()
     20 {
     21     t = 0;
     22     memset(head,-1,sizeof(head));
     23 }
     24 void add(int u,int v,int w)
     25 {
     26     ed[t].u = u;
     27     ed[t].v = v;
     28     ed[t].w = w;
     29     ed[t].next = head[u];
     30     head[u] = t++;
     31 }
     32 void spfa(int s,int e)
     33 {
     34     memset(vis,0,sizeof(vis));
     35     int i;
     36     for(i = 1; i <= n ; i++)
     37     {
     38         dis[i] = INF;
     39         p[i] = 0;
     40     }
     41     queue<int>q;
     42     dis[s] = 1;
     43     p[s] = 1;
     44     q.push(s);
     45     while(!q.empty())
     46     {
     47         int u = q.front();
     48         q.pop();
     49         vis[u] = 0;
     50         for(i = head[u] ; i != -1 ; i = ed[i].next)
     51         {
     52             int v = ed[i].v;
     53             double w = ed[i].w;
     54             if(dis[v]>=dis[u]+1)
     55             {
     56                 if(dis[v]==dis[u]+1)
     57                 {
     58                     if(p[v]<p[u]*w/100.0)
     59                     {
     60                         p[v] = p[u]*w/100.0;
     61                         pa[v] = u;
     62                     }
     63                 }
     64                 else
     65                 {
     66                     dis[v] = dis[u]+1;
     67                     p[v] = p[u]*w/100.0;
     68                     pa[v] = u;
     69                 }
     70                 if(!vis[v])
     71                 {
     72                     vis[v] = 1;
     73                     q.push(v);
     74                 }
     75             }
     76         }
     77     }
     78     printf("%d %lf
    ",dis[e],1-p[e]);
     79     int x = pa[e],g=1;
     80     o[g] = e;
     81     while(x!=s)
     82     {
     83         g++;
     84         o[g] = x;
     85         x = pa[x];
     86     }
     87     g++;
     88     o[g] = s;
     89     for(i = g ; i > 1; i--)
     90     printf("%d ",o[i]);
     91     printf("%d
    ",o[1]);
     92 }
     93 int main()
     94 {
     95     int i;init();
     96     int a,b;
     97     scanf("%d%d",&n,&m);
     98     scanf("%d%d",&a,&b);
     99     for(i = 1; i <= m ; i++)
    100     {
    101         int u,v;
    102         double w;
    103         scanf("%d%d%lf",&u,&v,&w);
    104         add(u,v,100-w);
    105         add(v,u,100-w);
    106     }
    107     spfa(a,b);
    108     return 0;
    109 }
    View Code
  • 相关阅读:
    hdu1233
    zoj 3529
    hdu 2516 取石子游戏
    组合博弈理论
    博弈——sg函数的原理和优化
    博弈及sg函数
    poj2039
    hdu 1250
    C# 类的继承和访问
    C# 索引
  • 原文地址:https://www.cnblogs.com/shangyu/p/3364357.html
Copyright © 2011-2022 走看看