Pagini recente » Cod sursa (job #1383185) | Cod sursa (job #534122) | Cod sursa (job #285808) | Cod sursa (job #1430837) | Cod sursa (job #796773)
Cod sursa(job #796773)
#include<iostream>
#include<fstream>
#include<vector>
#include<string.h>
using namespace std;
const int NMAX = 1001;
const int MMAX = 10001;
struct muchie {
int x,y;
};
vector <int> v[NMAX];
muchie a[MMAX];
int capacity[NMAX][NMAX],flux[NMAX][NMAX],p[NMAX],viz[NMAX],c[NMAX],sol[MMAX],n;
int bfs()
{
int st,dr,x;
st=1;
dr=1;
c[st]=1;
memset(viz,0,sizeof(viz));
viz[1]=1;
while(st<=dr) {
x=c[st];
st++;
for(vector <int> :: iterator it=v[x].begin();it!=v[x].end();it++)
if(viz[*it]==0 && capacity[x][*it]>flux[x][*it]) {
viz[*it]=1;
c[++dr]=*it;
p[*it]=x;
}
}
return viz[n];
}
inline int saturata(int x, int y)
{
if(max(flux[x][y],flux[y][x])==capacity[x][y])
return 1;
return 0;
}
void bfs2(int x, int y)
{
int st,dr;
st=1;
dr=1;
c[st]=x;
viz[x]=y;
while(st<=dr) {
x=c[st];
st++;
for(vector <int> :: iterator it=v[x].begin();it!=v[x].end();it++)
if(viz[*it]==0 && saturata(x,*it)==0) {
viz[*it]=y;
c[++dr]=*it;
}
}
}
int drum(int x, int y)
{
if( ( viz[1]==viz[x] && viz[y]==viz[n] ) || ( viz[1]==viz[y] && viz[x]==viz[n] ) )
return 1;
return 0;
}
int main ()
{
int i,x,y,m,cc,fluxcurent,nod;
ifstream f("critice.in");
ofstream g("critice.out");
f>>n>>m;
for(i=1;i<=m;i++) {
f>>x>>y>>cc;
v[x].push_back(y);
v[y].push_back(x);
capacity[x][y]=cc;
capacity[y][x]=cc;
a[i].x=x;
a[i].y=y;
}
f.close();
while(bfs()) {
for(vector <int> :: iterator it=v[n].begin();it!=v[n].end();it++) {
p[n]=*it;
fluxcurent=(1<<30);
for(nod=n;nod!=1;nod=p[nod])
fluxcurent=min(fluxcurent,capacity[p[nod]][nod]-flux[p[nod]][nod]);
for(nod=n;nod!=1;nod=p[nod]) {
flux[p[nod]][nod]=flux[p[nod]][nod]+fluxcurent;
flux[nod][p[nod]]=flux[nod][p[nod]]-fluxcurent;
}
}
}
memset(viz,0,sizeof(viz));
for(i=1;i<=n;i++)
if(viz[i]==0)
bfs2(i,i);
for(i=1;i<=m;i++)
if(saturata(a[i].x,a[i].y)) {
if(drum(a[i].x,a[i].y)==1)
sol[++sol[0]]=i;
}
g<<sol[0]<<'\n';
for(i=1;i<=sol[0];i++)
g<<sol[i]<<'\n';
g.close();
return 0;
}