• hdu4318Power transmission(单源最短路径)多校二


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

    这题做的好二  不会邻接表ME了一晚上  学会了邻接表 TLE了一晚上 看了最短路径WA了一上午 原来样例中用的100 我就直接写的100.。。。

    14次换来一次AC

    单元最短路径

    http://www.cnblogs.com/zen_chou/archive/2009/05/15/1457962.html

    View Code
     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<iostream>
     4 #include<queue>
     5 using namespace std;
     6 int f[50001];
     7 double s[50001],s1;
     8 struct node
     9 {
    10     int w, u,v,next;
    11 }men[2500001];
    12 int first[50001],t;
    13 void init()
    14 {
    15     t = 0;
    16     memset(first,-1,sizeof(first));
    17 }
    18 void add(int u,int v,int w)
    19 {
    20     men[t].u = u;
    21     men[t].v = v;
    22     men[t].w = w;
    23     men[t].next = first[u];
    24     first[u] = t;
    25     t++;
    26 }
    27 void spfa(int n,int st)
    28 {
    29     int i,j,max,k;
    30     memset(f,0,sizeof(f));
    31     for(i = 1; i <= n ; i++)
    32         s[i] = -1;
    33     queue<int> q;
    34     f[st]  = 1;
    35     q.push(st);
    36     s[st] = s1;
    37     while(!q.empty())
    38     {
    39         k = q.front();
    40         q.pop();
    41         f[k] = 0;
    42         for(i = first[k] ; i!=-1 ; i = men[i].next)
    43         {        
    44             if(s[k]*men[i].w/100>s[men[i].v])
    45             {
    46                 s[men[i].v] = s[k]*men[i].w/100;
    47                 if(!f[men[i].v])
    48                 {    
    49                     q.push(men[i].v);
    50                     f[men[i].v] = 1;
    51                 }                
    52             }
    53         }
    54     }
    55 }
    56 int main()
    57 {
    58     int t1,n,i,j,k,z,a1,a2,g,x;
    59     while(cin>>t1)
    60     {
    61         init();
    62         memset(men,0,sizeof(men));
    63         for(i = 1 ;i <= t1 ; i++)
    64         {
    65             cin>>n;
    66             for(j = 1 ; j <= n ; j++)
    67             {
    68                 cin>>x>>z;
    69                 add(i,x,100-z);
    70             }
    71         }
    72         cin>>a1>>a2>>s1;
    73         if(a1==a2)
    74         {
    75             printf("0.00\n");
    76             continue;
    77         }
    78         spfa(t1,a1);
    79         if(s[a2]>=0)
    80         printf("%.2lf\n",s1-s[a2]);
    81         else
    82         printf("IMPOSSIBLE\n");
    83     }
    84     return 0;
    85 }
  • 相关阅读:
    固态硬盘 每秒1.5G
    editPlus
    juqery 插入一行
    BufferedReader读取UTF8文件中文乱码
    jquery table 操作
    noSql
    javascript 开发规范
    同一服务器上安装多个tomcat
    100 个搜索引擎
    firefox 开发sdk
  • 原文地址:https://www.cnblogs.com/shangyu/p/2619424.html
Copyright © 2020-2023  润新知