poj Candies

http://poj.org/problem?id=3159

 1 #include<cstdio>

 2 #include<queue>

 3 #include<cstring>

 4 #include<algorithm>

 5 #include<cmath>

 6 #define max1 30005

 7 #define max2 150005

 8 using namespace std;

 9 int head[max1],next[max2];

10 int dis[max1];

11 bool vis[max1];

12 const int inf=1<<23;

13 struct node

14 {

15     int u,v;

16     int c;

17     node(){}

18     node(int u,int v,int c):u(u),v(v),c(c){}

19 }p[max2];

20 

21 struct node1

22 {

23     int v,c;

24     node1(){}

25     node1(int v,int c):v(v),c(c){}

26     bool operator <(const node1 &a)const

27     {

28         return c>a.c;

29     }

30 };

31 int e,n,m;

32 void addnode(int u,int v,int c)

33 {

34     p[e]=node(u,v,c);

35     next[e]=head[u];

36     head[u]=e++;

37 }

38 

39 bool relax(int u,int v,int c)

40 {

41     if(dis[v]>dis[u]+c)

42     {

43         dis[v]=dis[u]+c;

44         return true;

45     }

46     return false;

47 }

48 

49 void inti()

50 {

51     memset(head,-1,sizeof(head));

52     memset(next,-1,sizeof(next));

53     e=0;

54     for(int i=0; i<m; i++)

55     {

56         int u,v,c;

57         scanf("%d%d%d",&u,&v,&c);

58         addnode(u,v,c);

59     }

60 }

61 

62 void dij(int src)

63 {

64     memset(vis,0,sizeof(vis));

65     for(int i=1; i<=n; i++) dis[i]=inf;

66     dis[src]=0;

67     priority_queue<node1>que;

68     que.push(node1(src,dis[src]));

69     for(int i=0; i<n; i++)

70     {

71         while(!que.empty()&&vis[que.top().v])

72             que.pop();

73         if(que.empty()) break;

74         node1 pre=que.top(); que.pop();

75         vis[pre.v]=true;

76         for(int j=head[pre.v]; j+1; j=next[j])

77         {

78             if(relax(pre.v,p[j].v,p[j].c)&&!vis[p[j].v])

79                 que.push(node1(p[j].v,dis[p[j].v]));

80         }

81     }

82 }

83 

84 int main()

85 {

86     while(scanf("%d%d",&n,&m)!=EOF){

87         inti();

88         dij(1);

89         printf("%d\n",dis[n]);

90     }

91     return 0;

92 }
View Code

 

你可能感兴趣的:(poj)