法相遇输出peace! 1 #include<cstdio>
2 #include<cstdlib>
3 #include<cstring>
4 #include<iostream>
5 #define oo 117901063
6 using namespace std;
7 int n,c,o=0;
8 struct node
9 {
10 int x,len,n;
11 }e[10010];
12 int k[10010];
13 int st,en;
14 int d[10010],f[1000000],tt[10010];
15 bool v[10010];
16 int ans;
17 void add(int x,int y,int z)
18 {
19 e[++o].x=y;
20 e[o].len=z;
21 e[o].n=k[x];
22 k[x]=o;
23 }
24 void spfa(int st,int en)
25 {
26 memset(d,63,sizeof(d));
27 memset(f,0,sizeof(f));
28 d[st]=0;
29 f[1]=st;
30 v[st]=true;
31 int head=1,tail=1,now;
32 while (head<=tail)
33 {
34 now=f[head];
35 v[now]=false;
36 int t=k[now];
37 while(t)
38 {
39 if (d[e[t].x]>d[now]+e[t].len)
40 {
41 d[e[t].x]=d[now]+e[t].len;
42 if (!v[e[t].x])
43 {
44 v[e[t].x]=true;
45 f[++tail]=e[t].x;
46 }
47 }
48 t=e[t].n;
49 }
50 head++;
51 }
52 }
53 int main()
54 {
55 scanf("%d %d\n",&n,&c);
56 int a,b,q;
57 for (int i=1;i<=c;i++)
58 {
59 scanf("%d %d %d\n",&a,&b,&q);
60 add(a,b,q);
61 add(b,a,q);
62 }
63 scanf("%d %d\n",&st,&en);
64 spfa(st,en);
65 memcpy(tt,d,sizeof(d));
66 spfa(en,st);
67 ans=oo;
68 for (int i=1;i<=n;i++)
69 {
70 ans=min(ans,max(d[i],tt[i]));
71 }
72 if (ans<oo) printf("%d\n",ans);
73 else printf("Peace!\n");
74 // system("pause");
75 return 0;
76 }
77