提交时间:2024-10-23 09:50:56

运行 ID: 33835

//100 #include<bits/stdc++.h> using namespace std; #define int long long int n,m,cnt; struct edge{ int u,v,w; }; edge e[8005]; int dis[4005]; bool negative_ring(){ for(int i=1;i<=n;i++)dis[i]=2e9; dis[1]=0; for(int i=1;i<=n;i++){ for(int j=1;j<=m;j++){ if(dis[e[j].v]>dis[e[j].u]+e[j].w){ dis[e[j].v]=dis[e[j].u]+e[j].w; } } } for(int j=1;j<=m;j++){ if(dis[e[j].v]>dis[e[j].u]+e[j].w){ return 1; } } return 0; } signed main(){ //freopen("walk.in","r",stdin); //freopen("walk.out","w",stdout); cin>>n>>m; for(int i=1;i<=m;i++){ int u,v; char w; cin>>u>>v>>w; if(w=='(')e[i]={u,v,1}; else e[i]={u,v,-1}; } bool nr=negative_ring(); for(int i=1;i<=m;i++)e[i].w=-e[i].w; bool pr=negative_ring(); if(nr^pr)cout<<"No"<<endl; else cout<<"Yes"<<endl; return 0; }