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 }

 

你可能感兴趣的:(最短路径)