1 struct edgs{int go,next,w;}e[maxm];
2 double d[maxn];
3 int n,m,tot,v[maxn],head[maxn];
4 bool mark[maxn],flag;
5 void insert(int x,int y,int z)
6 {
7 e[++tot].go=y;e[tot].w=z;e[tot].next=head[x];head[x]=tot;
8 }
9 void spfa(int x)
10 {
11 if(mark[x]){flag=1;return;}
12 mark[x]=1;
13 for(int i=head[x],y;i;i=e[i].next)
14 if(d[x]+e[i].w<d[y=e[i].go])
15 {
16 d[y]=d[x]+e[i].w;
17 spfa(y);
18 if(flag)return;
19 }
20 mark[x]=0;
21 }
22 bool check()
23 {
24 for(int i=1;i<=n;i++)d[i]=mark[i]=0;
25 flag=0;
26 for(int i=1;i<=n;i++)
27 {
28 spfa(i);
29 if(flag)return 1;
30 }
31 return 0;
32 }