Pagini recente » Cod sursa (job #2345691) | Cod sursa (job #321988) | Cod sursa (job #66763) | Cod sursa (job #298572) | Cod sursa (job #2652049)
#include <bits/stdc++.h>
#define oo 0x3f3f3f3f
#define muchie pair<int, int>
#define e1 first
#define e2 second
using namespace std;
ifstream f("critice.in");
ofstream g("critice.out");
int n, m, x, y, cap;
int C[1005][1005], TT[1005], C1[1005][1005];
vector<int> graf[1005], rez;
bool viz[1005];
vector<muchie> muc;
void Read()
{
f>>n>>m;
for(int i = 1;i <= m;++i)
{
f>>x>>y>>cap;
graf[x].push_back(y); graf[y].push_back(x);
C[x][y] = C[y][x] = cap;
muc.push_back(make_pair(x, y));
}
}
bool bfs()
{
memset(viz, false, sizeof(viz));
viz[1] = true;
queue<int> q;
q.push(1);
while(!q.empty())
{
int nod = q.front();
q.pop();
if(nod == n) continue;
for(auto it : graf[nod])
{
if(viz[it] || C[nod][it] == 0) continue;
viz[it] = true;
q.push(it);
TT[it] = nod;
}
}
return viz[n];
}
int maximum_flow()
{
int fmin, flow = 0;
for(;bfs();)
{
for(auto it : graf[n])
{
int nod = it;
if(C[nod][n] == 0 || !viz[nod]) continue;
TT[n] = nod;
fmin = oo;
for(nod = n; nod != 1;nod = TT[nod])
fmin = min(fmin, C[TT[nod]][nod]);
if(fmin == 0) continue;
for(nod = n;nod != 1;nod = TT[nod])
{
C[TT[nod]][nod] -= fmin;
C[nod][TT[nod]] += fmin;
}
flow += fmin;
}
}
return flow;
}
void Solve()
{
maximum_flow();
int nr = 0;
bool ok;
for(auto it : muc)
{
++nr;
ok = false;
++C[it.e1][it.e2];
if(bfs())
ok = true;
--C[it.e1][it.e2];
if(!ok)
{
++C[it.e2][it.e1];
if(bfs())
ok = true;
--C[it.e2][it.e1];
}
if(ok)
rez.push_back(nr);
}
g<<rez.size()<<'\n';
for(auto it : rez)
g<<it<<'\n';
}
int main()
{
Read();
Solve();
return 0;
}