Pagini recente » Cod sursa (job #3258798) | Cod sursa (job #1113706) | Cod sursa (job #1759847) | Cod sursa (job #1559375) | Cod sursa (job #403962)
Cod sursa(job #403962)
# include <fstream>
# include <algorithm>
# include <iostream>
using namespace std;
struct bla{
int c, ind;};
bla c[1024][1024];
int *a[1024], *I[1024], n, m, t[1024], crt[10024], nrc, x[10024], y[10024], nrcrit;
void add (int i, int j)
{
a[i][0]++;
a[i]=(int *)realloc(a[i], (a[i][0]+1)*4);
a[i][a[i][0]]=j;
}
void read ()
{
ifstream fin ("critice.in");
fin>>n>>m;
for (int i=1;i<=n;i++)
{
a[i]=(int *)malloc (4);
a[i][0]=0;
}
for (int i=1;i<=m;i++)
{
int xx, yy, co;
fin>>xx>>yy>>co;
c[xx][yy].c=co;
c[yy][xx].c=co;
c[xx][yy].ind=i;
c[yy][xx].ind=i;
add(xx, yy);
add(yy, xx);
if (co==0)
x[++nrcrit]=xx, y[nrcrit]=yy, x[++nrcrit]=yy, y[nrcrit]=xx;
}
}
int bfs (int s, int d)
{
for (int i=1;i<=n;i++)
t[i]=-1;
int co[20048], st, dr, k;
st=dr=1;
co[st]=s;
t[s]=0;
while (st<=dr)
{
k=co[st++];
for (int j=1;j<=a[k][0];j++)
{
int i=a[k][j];
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;
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;
}
}
}
void verif ()
{
for (int i=1;i<=nrcrit;i++)
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;
}