Pagini recente » Cod sursa (job #410967) | Cod sursa (job #339625) | Cod sursa (job #2447969) | Cod sursa (job #462720) | Cod sursa (job #1017239)
#include <cstdio>
#include <cstdlib>
#include <vector>
#define inf 1000000000
using namespace std;
struct muchie
{
short int x;
short int y;
};
vector<short int>v[1001];
char a[1001],sol[10000];
short int cc[1001],s[1001][1001],c[1001][1001],t[1001];
int n,m,lim,nr,i,j,nod1,nod,x,y,z,nr1;
muchie v1[10000];
int drum()
{
for(i=1;i<=n;i++)a[i]=0;
nr=0;
cc[0]=1;
a[1]=1;
for(i=0;i<=nr;i++)
{
nod=cc[i];
if(nod==n)continue;
lim=v[nod].size();
for(j=0;j<lim;j++)
{
nod1=v[nod][j];
if(!a[nod1]&&c[nod][nod1]-s[nod][nod1])
{
a[nod1]=1;
cc[++nr]=nod1;
t[nod1]=nod;
}
}
}
if(a[n])return 1;
else return 0;
}
int main()
{
freopen("critice.in", "r", stdin);
freopen("critice.out", "w", stdout);
scanf("%d%d",&n,&m);
for(i=0;i<m;i++)
{
scanf("%d%d%d",&x,&y,&z);
v[x].push_back(y);
v[y].push_back(x);
v1[i].x=x;
v1[i].y=y;
c[x][y]=z;
c[y][x]=z;
}
while(drum())
{
lim=v[n].size();
for(i=0;i<lim;i++)
{
nod=v[n][i];
if(a[nod]&&c[nod][n]-s[nod][n])
{
t[n]=nod;
x=inf;
for(nod=n;nod!=1;nod=t[nod])
{
x=min(x,c[t[nod]][nod]-s[t[nod]][nod]);
}
for(nod=n;nod!=1;nod=t[nod])
{
s[t[nod]][nod]+=x;
s[nod][t[nod]]-=x;
}
}
}
}
nr1=0;
for(x=0;x<m;x++)
if(s[v1[x].x][v1[x].y]==0 && s[v1[x].y][v1[x].x]==0)
{
c[v1[x].x][v1[x].y]++;
c[v1[x].y][v1[x].x]++;
if(drum())
{
sol[x]=1;
nr1++;
}
c[v1[x].x][v1[x].y]--;
c[v1[x].y][v1[x].x]--;
}
printf("%d\n",nr1);
for(i=0;i<m;i++)
{
if(sol[i])printf("%d\n",i+1);
}
fclose(stdin);
fclose(stdout);
return 0;
}