代码如下:
#include<bits/stdc++.h>
using namespace std;
long long n,t,m,s,ss,dis[100005],is_q[100005],cnt[100005];
bool bbb=true;
struct eee
{
long long v,c;
};
vector<eee> e[100005];
void spfa()
{
memset(cnt,0,sizeof(cnt));
memset(is_q,0,sizeof(is_q));
queue < int> q;
q.push(s);
is_q[s]=1;
dis[s]=0;
while(q.size())
{
long long u=q.front();
q.pop();
is_q[u]=0;
for(long long i=0;i<e[u].size();i++)
{
long long v=e[u][i].v,c=e[u][i].c;
if(dis[v]>dis[u]+c)
{
dis[v]=dis[u]+c;
if(is_q[v]==0)
{
cnt[v]++;
if(cnt[v]>=n)
{
cout<<"No"<<endl;
exit(0);
}
q.push(v);
is_q[v]=1;
}
}
}
}
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)e[i].clear();
for(long long t=1;t<=n;t++)if(t!=s)dis[t]=2147483647;
for(long long i=1;i<=m;i++)
{
int op;
long long u,v;
cin>>op;
if(op==3)
{
cin>>u>>v;
e[v].push_back(eee{u,0});
e[u].push_back(eee{v,0});
}
else
{
long long w;
cin>>u>>v>>w;
if(op==1)e[u].push_back(eee{v,-w});
else e[v].push_back(eee{u,-w});
}
}
for(int i=1;i<=n;i++)
e[s].push_back({i,0});
bbb=true;
spfa();
cout<<"Yes"<<endl;
return 0;
}
测评状态如下:
#1 AC
#2 AC
#3 AC
#4 AC
#5 AC
#6 AC
#7 AC
#8 AC
#9 AC
#10 AC
#11 AC
#12 WA read 'N'
#13 AC
#14 AC
#15 AC
#16 AC
#17 AC
#18 AC
#19 AC
#20 AC
#21 AC
#22 AC
#23 AC
#24 AC
#25 AC
#26 AC
#27 AC
#28 AC
#29 AC
#30 WA read 'N'