社区讨论
50pts求条,悬赏4个关注
P3275[SCOI2011] 糖果参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @lvdfjyye
- 此快照首次捕获于
- 2024/04/24 14:24 2 年前
- 此快照最后确认于
- 2024/04/24 19:23 2 年前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1E6+5;
#define int long long
struct Edge{
int x,y;
};
vector<Edge> G[N];
int dis[N],in[N];
bool vis[N];
int n,m,s;
bool spfa(int x){
queue<int> q;
memset(dis,0x7f,sizeof(dis));
q.push(x);
++in[x];
dis[x]=0,vis[x]=1;
while(!q.empty()){
int tmp=q.front();
q.pop();
vis[tmp]=0;
for(auto [v,w]:G[tmp]){
if(dis[v]>dis[tmp]+w){
dis[v]=dis[tmp]+w;
if(!vis[v]){
++in[v];
if(in[v]>=n+1){
return 0;
}
q.push(v);
vis[v]=1;
}
}
}
}
return 1;
}
void work(){
int u,v,w,op;
cin>>n>>m;
while(m--){
cin>>op;
if(op==1){
cin>>u>>v;
G[u].push_back({v,0});
G[v].push_back({u,0});
}else if(op==2){
cin>>u>>v;
G[v].push_back({u,-1});
}else if(op==3){
cin>>u>>v;
G[u].push_back({v,0});
}else if(op==4){
cin>>u>>v;
G[u].push_back({v,-1});
}else{
cin>>u>>v;
G[v].push_back({u,0});
}
}for(int i=1;i<=n;++i) G[0].push_back({i,0});
if(!spfa(0)) cout<<-1<<endl;
else{
int minn=0;
for(int i=1;i<=n;++i){
minn=min(minn,dis[i]);
}
int ans=0;
for(int i=1;i<=n;++i){
ans+=dis[i]-minn+1;
}cout<<ans<<endl;
}
return ;
}
signed main(){
ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
work();
return 0;
}
回复
共 2 条回复,欢迎继续交流。
正在加载回复...