Pagini recente » Cod sursa (job #3288447) | Cod sursa (job #1546557) | Cod sursa (job #1154637) | Cod sursa (job #1867544) | Cod sursa (job #964129)
Cod sursa(job #964129)
#include<fstream>
#include<vector>
#include<cstring>
#include<algorithm>
#define pb push_back
using namespace std;
const int NMAX=1003;
const int INF=0x3f3f3f3f;
vector<int> G[NMAX],sol;
int C[NMAX][NMAX],N,M,X1[10003],Y1[10003],Z1[10003];
int T[NMAX],CD[NMAX];
bool viz[NMAX];
void update(){
int nod,minn=INF;
nod=N;
while(T[nod]!=-1){
if(C[T[nod]][nod]<minn)minn=C[T[nod]][nod];
nod=T[nod];
}
nod=N;
while(T[nod]!=-1){
C[T[nod]][nod]-=minn;
C[nod][T[nod]]+=minn;
nod=T[nod];
}
}
int bfs(int param){
int ok=0,V,i,j;
memset(viz,0,sizeof(viz));
viz[1]=1; T[1]=-1;
CD[0]=CD[1]=1;
for(i=1;i<=CD[0];++i){
V=CD[i];
for(j=0;j<G[V].size();++j)
if(!viz[G[V][j]] && C[V][G[V][j]]>0){
if(G[V][j]!=N) CD[++CD[0]]=G[V][j];
T[G[V][j]]=V;
viz[G[V][j]]=1;
}
if(viz[N]){ ok=1; if(!param){ update(); viz[N]=0; }else return ok; }
}
return ok;
}
int main(){
ifstream cin("critice.in");
ofstream cout("critice.out");
int i,j,x,y,z,fn;
cin>>N>>M;
for(i=1;i<=M;++i){
cin>>x>>y>>z;
G[x].pb(y);
G[y].pb(x);
C[x][y]=z;
C[y][x]=z;
X1[i]=x; Y1[i]=y; Z1[i]=z;
}
while(bfs(0));
for(i=1;i<=N;++i)
{
fn=0;
++C[X1[i]][Y1[i]];
if(bfs(1)) { sol.pb(i); fn=1; }
--C[X1[i]][Y1[i]];
if(!fn){
++C[Y1[i]][X1[i]];
if(bfs(1)) sol.pb(i);
--C[Y1[i]][X1[i]];
}
}
cout<<sol.size()<<'\n';
for(i=0;i<sol.size();++i)cout<<sol[i]<<'\n';
return 0;
}