Pagini recente » Cod sursa (job #104821) | Cod sursa (job #884731) | Cod sursa (job #315636) | Cod sursa (job #375348) | Cod sursa (job #388288)
Cod sursa(job #388288)
# include <fstream>
# include <iostream>
# include <algorithm>
using namespace std;
int *a[1003], c[1003][1003], I[1003][1003], t[1003], n, m, critice[10003], nc;
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;
}
int x, y, co;
for (int i=1;i<=m;i++)
{
fin>>x>>y>>co;
a[x][0]++;
a[x]=(int *) realloc (a[x], (a[x][0]+1)*4);
a[x][a[x][0]]=y;
a[y][0]++;
a[y]=(int *) realloc (a[y], (a[y][0]+1)*4);
a[y][a[y][0]]=x;
c[x][y]=co;
c[y][x]=co;
I[x][y]=i;
I[y][x]=i;
}
}
int bfs (int s, int d)
{
int cc[1003], st, dr, k;
st=dr=1;
cc[st]=s;
for (int i=1;i<=n;i++)
t[i]=-1;
t[s]=0;
while (st<=dr)
{
k=cc[st++];
for (int i=1;i<=a[k][0];i++)
if (c[k][a[k][i]]>0 && t[a[k][i]]==-1)
{
cc[++dr]=a[k][i];
t[a[k][i]]=k;
}
if (k==d)
return 1;
}
return 0;
}
void EK ()
{
int cmin;
while (bfs (1, n))
{
cmin=1000000;
for (int i=n;t[i];i=t[i])
if (c[t[i]][i]<cmin)
cmin=c[t[i]][i];
for (int i=n;t[i];i=t[i])
{
c[t[i]][i]-=cmin;
c[i][t[i]]-=cmin;
}
}
}
void cauta (int s, int d)
{
for (int i=1;i<=n;i++)
for (int j=1;j<=a[i][0];j++)
if (c[i][a[i][j]]==0)
if (bfs(1, i) && bfs(a[i][j], n))
critice[++nc]=I[i][a[i][j]];
}
void write ()
{
sort(critice+1, critice+nc+1);
ofstream fout ("critice.out");
fout<<nc<<endl;
for (int i=1;i<=nc;i++)
fout<<critice[i]<<endl;
}
int main ()
{
read ();
EK ();
cauta (1, n);
write ();
return 0;
}