3 条题解
-
1
#include <bits/stdc++.h> using namespace std; #define int long long //不开long long见祖宗 const int N=1e6+10; int n,m,head[N],ne[N],w[N],to[N],id,dis[N],vis[N],cnt[N]; inline void add(int x,int y,int z){ to[++id]=y,w[id]=z,ne[id]=head[x],head[x]=id; } int spfa(){ memset(dis,-0x3f,sizeof(dis)); dis[n+1]=0,vis[n+1]=1,cnt[n+1]=1; stack<int> q; q.push(n+1); while(!q.empty()){ int t=q.top(); q.pop(); vis[t]=0; for(int i=head[t];i;i=ne[i]){ int v=to[i]; if(dis[v]<dis[t]+w[i]){ dis[v]=dis[t]+w[i]; if(!vis[v]){ q.push(v),vis[v]=1; if(++cnt[v]>=n) return -1; } } } } int sum=0; for(int i=1;i<=n+1;i++){ sum+=dis[i]; } return sum; } signed main(){ cin>>n>>m; for(int i=0,x,y,z;i<m;i++){ cin>>z>>x>>y; if(z==1){ add(x,y,0),add(y,x,0); }else if(z==2){ add(x,y,1); }else if(z==3){ add(y,x,0); }else if(z==4){ add(y,x,1); }else if(z==5){ add(x,y,0); } } for(int i=1;i<=n;i++) add(n+1,i,1); cout<<spfa(); }
信息
- ID
- 422
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 7
- 标签
- 递交数
- 163
- 已通过
- 42
- 上传者