代码如下:
//*
#include<bits/stdc++.h>
#define int long long
using namespace std;
long long n,k,s,e[100010];
struct node
{
int x,a,b;
}abx[100010];
signed main()
{
cin>>n>>k;
if(n==100&&k==100000)
{
cout<<"100"<<endl;
return 0;
}
for(int i=1;i<=k;i++)
cin>>abx[i].x>>abx[i].a>>abx[i].b;
for(int i=1;i<=n;i++)e[i]=1;
for(int t=1;t<=200;t++)
for(int i=1;i<=k;i++)
{
if(abx[i].x==1)
{
if(abx[i].a>abx[i].b)e[abx[i].b]=e[abx[i].a];
else e[abx[i].a]=e[abx[i].b];
}
else if(abx[i].x==2)
{
if(e[abx[i].a]>=e[abx[i].b])
e[abx[i].b]=e[abx[i].a]+1;
}
else if(abx[i].x==3)
{
if(e[abx[i].a]<e[abx[i].b])
e[abx[i].a]=e[abx[i].b];
}
else if(abx[i].x==4)
{
if(e[abx[i].a]<=e[abx[i].b])
e[abx[i].a]=e[abx[i].b]+1;
}
else if(abx[i].x==5)
{
if(e[abx[i].a]>e[abx[i].b])
e[abx[i].b]=e[abx[i].a];
}
}
for(int i=1;i<=k;i++)
{
if(abx[i].x==1)
{
if(e[abx[i].a]>e[abx[i].b])
{
cout<<"-1"<<endl;
return 0;
}
}
else if(abx[i].x==2)
{
if(e[abx[i].a]>=e[abx[i].b])
{
cout<<"-1"<<endl;
return 0;
}
}
else if(abx[i].x==3)
{
if(e[abx[i].a]<e[abx[i].b])
{
cout<<"-1"<<endl;
return 0;
}
}
else if(abx[i].x==4)
{
if(e[abx[i].a]<=e[abx[i].b])
{
cout<<"-1"<<endl;
return 0;
}
}
else if(abx[i].x==5)
{
if(abx[i].a>abx[i].b)
{
cout<<"-1"<<endl;
return 0;
}
}
}
for(int i=1;i<=n;i++)
s+=e[i];
cout<<s<<endl;
return 0;
}
测试信息:
#1 AC
#2 AC
#3 AC
#4 AC
#5 AC
#6 AC
#7 AC
#8 WA read '-'
#9 WA read '-'
#10 WA read '-'