萌新一直WA #1#8#9#10,不知道什么原因,有大佬知道吗/kel
#include<iostream>
#include<cstdio>
#include<queue>
#include<string.h>
using namespace std;
int n,k,dis[300005],cnt[300005];
int fir[300005],tot;
long long ans;
struct edge
{
int nxt,to,val;
}e[300005];
int read()
{
int a=0;
char x=getchar();
while(x<'0'||x>'9') x=getchar();
while(x>='0'&&x<='9') a=(a<<3)+(a<<1)+x-48,x=getchar();
return a;
}
void add(int u,int v,int w)
{
e[++tot]={fir[u],v,w};fir[u]=tot;
}
bool vis[300005],flag;
queue<int>q;
void SPFA(int s)
{
vis[s]=1;
q.push(s);
while(!q.empty())
{
int u=q.front();q.pop();
vis[u]=0;
for(int i=fir[u];i;i=e[i].nxt)
{
int v=e[i].to;
if(dis[v]<dis[u]+e[i].val)
{
dis[v]=dis[u]+e[i].val;
cnt[v]++;
if(cnt[v]>=n)
{
cout<<"-1";
flag=1;
return;
}
if(vis[v]==0)
{
vis[v]=1;
q.push(v);
}
}
}
}
}
signed main()
{
n=read();k=read();
while(k--)
{
int opt,u,v;
opt=read();u=read();v=read();
if(opt==1) add(u,v,0),add(v,u,0);
else if(opt==2) add(u,v,1);
else if(opt==3) add(v,u,0);
else if(opt==4) add(v,u,1);
else add(v,u,0);
if((u==v)&&(opt==2||opt==4))
{
cout<<"-1";
return 0;
}
}
for(int i=n;i>=1;i--) add(0,i,1);
SPFA(0);
if(flag) return 0;
for(int i=1;i<=n;i++)
ans+=dis[i];
cout<<ans;
return 0;
}