Pagini recente » Cod sursa (job #361229) | Cod sursa (job #1623995) | Statistici Antonio Ganea (antonioganea2) | Cod sursa (job #1784189) | Cod sursa (job #1247583)
#include <iostream>
#include <fstream>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <queue>
using namespace std;
ifstream f("critice.in");
ofstream g("critice.out");
int n,m,c[1005][1005],fol[1005][1005],ant[1005],use[1005],res,inf=2147000000,sol=0,tx[10005],ty[10005];
int crit[10005],meet[1005],k,valsx,valsy,valdx,valdy;
vector <int> v[1005];
queue <int> q;
void DFS(int x,int val)
{ int i;
for(i=0;i<v[x].size();i++)
if (!meet[v[x][i]] && fol[x][v[x][i]]<c[x][v[x][i]])
{meet[v[x][i]]=val; DFS(v[x][i],val);}
}
void BFS(int x)
{ int i,j,nod,nod2;
while(!q.empty()) q.pop();
memset(use,0,sizeof(use));
memset(ant,0,sizeof(ant));
q.push(x); use[x]=1;
while(!q.empty())
{ nod=q.front(); q.pop();
if (nod==n) return;
for(i=0;i<v[nod].size();i++)
if (!use[v[nod][i]] && c[nod][v[nod][i]]>fol[nod][v[nod][i]])
{ nod2=v[nod][i];
q.push(nod2);
use[nod2]=1;
ant[nod2]=nod;
}
}
}
int main()
{ int i,j,x,y,cap,n1,n2;
f>>n>>m;
for(i=1;i<=m;i++)
{ f>>x>>y>>cap;
c[x][y]=cap;
c[y][x]=cap;
v[x].push_back(y);
v[y].push_back(x);
tx[i]=x; ty[i]=y;
}
for(BFS(1);use[n]>0;BFS(1))
{
for(i=0;i<v[n].size();i++)
if (use[v[n][i]] && c[v[n][i]][n]>fol[v[n][i]][n])
{
x=v[n][i]; res=c[x][n]-fol[x][n];
while(ant[x])
{ n1=ant[x]; n2=x;
res=min(res,c[n1][n2]-fol[n1][n2]);
x=ant[x];
}
x=v[n][i];
fol[x][n]+=res;
fol[n][x]-=res;
while(ant[x])
{ n1=ant[x]; n2=x;
fol[n1][n2]+=res;
fol[n2][n1]-=res;
x=ant[x];
}
sol+=res;
}
}
meet[1]=1; meet[n]=2;
DFS(1,1); DFS(n,2);
for(i=1;i<=m;i++)
if (fol[tx[i]][ty[i]]==c[tx[i]][ty[i]] && (meet[tx[i]]+meet[ty[i]]==3))
{k++; crit[k]=i;}
g<<k<<"\n";
for(i=1;i<=k;i++)
g<<crit[i]<<"\n";
return 0;
}