比赛 |
20250904开学热身赛 |
评测结果 |
AWAAAWAAWWAW |
题目名称 |
追查坏牛奶 |
最终得分 |
58 |
用户昵称 |
左清源 |
运行时间 |
0.034 s |
代码语言 |
C++ |
内存使用 |
3.87 MiB |
提交时间 |
2025-09-04 21:58:40 |
显示代码纯文本
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll V=2e9+1,inf=1e15;
const int N=40,M=5e3+10;
int n,m,S,T,ver[N],to[M],nxt[M],idx=1;
int now[N],d[N],mk[N];
ll val[M];
vector<int>ans;
queue<int>q;
ll maxflow;
void add(int x,int y,ll z){
to[++idx]=y,nxt[idx]=ver[x],ver[x]=idx,val[idx]=z;
to[++idx]=x,nxt[idx]=ver[y],ver[y]=idx,val[idx]=0;
}
bool bfs(){
while(q.size())q.pop();
for(int i=1;i<=n;i++)now[i]=ver[i],d[i]=0;
q.push(S),d[S]=1;
while(q.size()){
int x=q.front();q.pop();
for(int i=ver[x];i;i=nxt[i]){
if(!val[i])continue;
int y=to[i];
if(!d[y]){
d[y]=d[x]+1;
q.push(y);
if(y==T)return 1;
}
}
}
return 0;
}
ll dinic(int x,ll flow){
if(x==T||!flow)return flow;
ll used=0,f;int y;
for(int i=now[x];i;i=nxt[i]){
now[x]=i,y=to[i];
if(d[y]==d[x]+1&&val[i]){
f=dinic(y,min(val[i],flow-used));
if(!f)d[y]=0;
else val[i]-=f,val[i^1]+=f,used+=f;
if(used==flow)break;
}
}
return used;
}
void flow(){
ll incf=0;
while(bfs())while(incf=dinic(S,inf))maxflow+=incf;
return;
}
int main(){
freopen("milk6.in","r",stdin);
freopen("milk6.out","w",stdout);
scanf("%d %d",&n,&m);
for(int i=1;i<=m;i++){
ll u,v,w;
scanf("%lld %lld %lld",&u,&v,&w);
add(u,v,w+V);
}
S=1,T=n;
flow();
printf("%lld %lld\n",maxflow%V,maxflow/V);
while(q.size())q.pop();
q.push(T);mk[T]=1;
while(q.size()){
int x=q.front();q.pop();
for(int i=ver[x];i;i=nxt[i]){
if(!(i&1))continue;
int y=to[i];
if(mk[y])continue;
if(val[i^1]){
q.push(y);
mk[y]=1;
}else{
ans.push_back(i^1);
}
}
}
sort(ans.begin(),ans.end());
for(auto p:ans)printf("%d\n",p/2);
return 0;
}