67pts WA on #6、7&9
Code:
#include<bits/stdc++.h>
#define il inline
#define rg register
#define int long long
using namespace std;
struct solution{
int n,m,in[3],cnt,he[2105],dis[105],vis[105];
bool inq[105];
struct Edge{
int to,nxt,w;
}edge[2105];
il void add(rg int u,rg int v,rg int w){
edge[++cnt]={v,he[u],w};
he[u]=cnt;
}
il bool spfa(){
dis[n+1]=0;
rg queue<int>q;
q.push(n+1);
inq[n+1]=1;
while(!q.empty()){
rg int u=q.front();
q.pop();
inq[u]=0;
if(vis[u]>n)
return 0;
for(rg int i=he[u];i;i=edge[i].nxt){
rg int v=edge[i].to,w=edge[i].w;
++vis[v];
if(dis[u]+w<dis[v]){
dis[v]=dis[u]+w;
if(!inq[v]){
inq[v]=1;
q.push(v);
}
if(vis[v]>n)
return 0;
}
}
}
return 1;
}
il void reset(){
cnt=n=m=0;
memset(in,0,sizeof(in));
memset(he,0,sizeof(he));
memset(vis,0,sizeof(vis));
memset(inq,0,sizeof(inq));
memset(edge,0,sizeof(edge));
memset(dis,0x3f,sizeof(dis));
}
il int Main(){
cin>>n>>m;
for(rg int i=1;i<=m;++i){
cin>>in[0]>>in[1]>>in[2];
add(in[1],in[0]-1,in[2]);
add(in[0]-1,in[1],-in[2]);
}
for(rg int i=1;i<=n;++i){
add(n+1,i,0);
}
if(spfa())
cout<<"true"<<endl;
else
cout<<"false"<<endl;
return 0;
}
};
solution sdbsrnberhnsdvfd;
signed main(){
rg int w;
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>w;
while(w--){
sdbsrnberhnsdvfd.reset();
sdbsrnberhnsdvfd.Main();
}
return 0;
}