Pagini recente » Cod sursa (job #1627648) | Cod sursa (job #1214159) | Cod sursa (job #564652) | Cod sursa (job #1879066) | Cod sursa (job #841424)
Cod sursa(job #841424)
#include <cstdio>
#include <vector>
#include <algorithm>
using namespace std;
#define MAX_N 1005
#define MAX_M 10005
#define INF 0x3f3f3f3f
#define foreach(V) for(typeof (V).begin() it = (V).begin(); it != (V).end(); ++it)
#define nr first
#define ord second
int N, M;
int F[MAX_N][MAX_N], C[MAX_N][MAX_N], T[MAX_N];
vector <pair <int, int> > G[MAX_N];
bool viz[MAX_N], V[MAX_M];
int Ans[MAX_M];
void citire()
{
scanf("%d %d",&N, &M);
for(int i = 1; i <= M; ++i)
{
int x, y, c;
scanf("%d %d %d",&x, &y, &c);
C[x][y] = C[y][x] = c;
G[x].push_back(make_pair(y, i));
G[y].push_back(make_pair(x, i));
}
}
bool BF()
{
memset(viz, 0, sizeof viz);
int Q[MAX_N];
Q[0] = Q[1] = 1;
viz[1] = 1;
for(int i = 1; i <= Q[0]; ++i)
{
int nod = Q[i];
if(nod == N) continue;
foreach(G[nod])
{
int act = it -> nr;
if(viz[act] || F[nod][act] == C[nod][act]) continue;
Q[++Q[0]] = act;
viz[act] = true;
T[act] = nod;
}
}
return viz[N];
}
void flux()
{
for(int fmin = INF; BF();)
foreach(G[N])
{
int nod = it -> nr;
if(!viz[nod] || C[nod][N] == F[nod][N]) continue;
fmin = INF;
T[N] = nod;
for(int i = N; i != 1; i = T[i])
fmin = min(fmin, C[T[i]][i] - F[T[i]][i]);
for(int i = N; i != 1; i = T[i])
F[T[i]][i] += fmin,
F[i][T[i]] -= fmin;
}
}
void search(int nod)
{
int Q[MAX_N];
Q[0] = 1;
Q[1] = nod;
memset(viz, 0, sizeof viz);
viz[nod] = 1;
for(int i = 1; i <= Q[0]; ++i)
{
int nod = Q[i];
foreach(G[nod])
{
int act = it -> nr;
int ord = it -> ord;
if(viz[act]) continue;
if(F[nod][act] == C[nod][act] || (V[ord] && F[act][nod] == C[act][nod]))
if(V[ord])
Ans[++Ans[0]] = ord;
else
V[ord] = true;
else
viz[act] = true,
Q[++Q[0]] = act;
}
}
}
void afisare()
{
printf("%d\n",Ans[0]);
sort(Ans+1, Ans+Ans[0]+1);
for(int i = 1; i <= Ans[0]; ++i)
printf("%d\n",Ans[i]);
}
int main()
{
freopen("critice.in","rt",stdin);
freopen("critice.out","wt",stdout);
citire();
flux();
search(1);
search(N);
afisare();
}