Pagini recente » Cod sursa (job #840897) | Cod sursa (job #2694783) | Cod sursa (job #1118716) | Cod sursa (job #1433498) | Cod sursa (job #2663265)
#include <bits/stdc++.h>
#define DIM 1010
using namespace std;
ifstream fin("critice.in");
ofstream fout("critice.out");
int n,m,x,y,i,z,nod,vecin,fluxmin,cnt;
int flux[DIM][DIM],c[DIM][DIM],sol[10010],v[DIM],w[DIM],t[DIM];
pair<int,int> muc[10010];
vector<int> L[DIM];
bitset<DIM> f;
deque<int> q;
int bfs() {
f.reset();
f[1]=1;
q.push_back(1);
while (!q.empty()) {
int nod=q.front();
for (auto vecin:L[nod]) {
if (f[vecin]==0&&c[nod][vecin]>flux[nod][vecin]) {
f[vecin]=1;
q.push_back(vecin);
t[vecin]=nod;
}
}
q.pop_front();
}
return f[n];
}
void befese(int start,int v[]) {
f.reset();
f[start]=1;
q.push_back(start);
v[start]=1;
while (!q.empty()) {
int nod=q.front();
for (auto vecin:L[nod]) {
if (f[vecin]==0&&c[nod][vecin]>max(flux[nod][vecin],-flux[nod][vecin])) {
f[vecin]=1;
q.push_back(vecin);
v[vecin]=1;
}
}
q.pop_front();
}
}
int main() {
fin>>n>>m;
for (i=1;i<=m;i++) {
fin>>x>>y>>z;
L[x].push_back(y);
L[y].push_back(x);
c[x][y]=c[y][x]=z;
muc[i]={x,y};
}
while (bfs()) {
for (auto vecin:L[n]) {
fluxmin=c[vecin][n]-flux[vecin][n];
nod=vecin;
while (nod!=1) {
fluxmin=min(fluxmin,c[t[nod]][nod]-flux[t[nod]][nod]);
nod=t[nod];
}
flux[vecin][n]+=fluxmin;
flux[n][vecin]-=fluxmin;
nod=vecin;
while (nod!=1) {
flux[t[nod]][nod]+=fluxmin;
flux[nod][t[nod]]-=fluxmin;
nod=t[nod];
}
}
}
befese(1,v);
befese(n,w);
for (i=1;i<=m;i++) {
x=muc[i].first;
y=muc[i].second;
if ((v[x]&&w[y])||(w[x]&&v[y]))
sol[++cnt]=i;
}
fout<<cnt<<"\n";
for (i=1;i<=cnt;i++)
fout<<sol[i]<<"\n";
return 0;
}