Pagini recente » Cod sursa (job #1380699) | Cod sursa (job #2157587) | Cod sursa (job #1649760) | Cod sursa (job #1669141) | Cod sursa (job #403904)
Cod sursa(job #403904)
# include <fstream>
# include <algorithm>
# include <iostream>
using namespace std;
struct bla{
int c, ind;};
bla c[1024][1024];
int n, m, t[1024], crt[10024], nrc, x[10024], y[10024], nrcrit;
void read ()
{
ifstream fin ("critice.in");
fin>>n>>m;
for (int i=1;i<=m;i++)
{
int a, b, co;
fin>>a>>b>>co;
c[a][b].c=co;
c[a][b].ind=i;
c[b][a].c=co;
c[b][a].ind=i;
}
}
int bfs (int s, int d)
{
int co[2048], st, dr, k;
st=dr=1;
co[st]=s;
t[s]=0;
while (st<=dr)
{
k=co[st++];
for (int i=2;i<=n;i++)
if (c[k][i].c>0 && t[i]==-1)
{
t[i]=k;
if (i==d)
return 1;
co[++dr]=i;
}
}
return 0;
}
void EK ()
{
int cmin;
for(int i=1;i<=n;i++)
t[i]=-1;
while (bfs(1, n))
{
cmin=1000000000;
for(int i=n;t[i];i=t[i])
if (c[t[i]][i].c<cmin)
cmin=c[t[i]][i].c;
for (int i=n;t[i];i=t[i])
{
c[t[i]][i].c-=cmin;
c[i][t[i]].c-=cmin;
if (c[i][t[i]].c==0)
x[++nrcrit]=t[i], y[nrcrit]=i;
}
for(int i=1;i<=n;i++)
t[i]=-1;
}
}
void verif ()
{
for (int i=1;i<=nrcrit;i++)
{
for(int j=1;j<=n;j++)
t[j]=-1;
if ((x[i]==1 || bfs(x[i], 1)) && (y[i]==n || bfs(y[i], n)))
crt[++nrc]=c[x[i]][y[i]].ind;
}
}
void write ()
{
ofstream fout ("critice.out");
fout<<nrc<<endl;
sort (crt+1, crt+nrc+1);
for (int i=1;i<=nrc;i++)
fout<<crt[i]<<endl;
}
int main ()
{
read ();
EK ();
verif ();
write ();
return 0;
}