Pagini recente » Cod sursa (job #1499280) | Cod sursa (job #1678291) | Cod sursa (job #308341) | Cod sursa (job #3154431) | Cod sursa (job #2506134)
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
const int infinit=999999999;
int n, m, c[1001][1001], f[1001][1001], t[1001], x[10001], y[10001], z[10001];
vector<int> rez;
bool bf(){
int nod, i;
queue<int> q;
for (i=1; i<=n; i++)
t[i]=0;
q.push(1);
t[1]=-1;
while (!q.empty()){
nod=q.front();
q.pop();
for (i=1; i<=n; i++)
if (t[i]==0 && c[nod][i]>f[nod][i]){
t[i]=nod;
q.push(i);
if (i==n)
return true;
}
}
return false;
}
int main(){
ifstream fin ("critice.in");
fin >> n >> m;
for (int i=1; i<=m; i++){
fin >> x[i] >> y[i] >> z[i];
c[x[i]][y[i]]=c[y[i]][x[i]]=z[i];
}
fin.close();
int flux=0;
while (bf()){
int i, r;
r=infinit;
i=n;
while (i!=1){
r=min(r, c[t[i]][i]-f[t[i]][i]);
i=t[i];
}
i=n;
while (i!=1){
f[t[i]][i]+=r;
f[i][t[i]]-=r;
i=t[i];
}
flux+=r;
}
for (int i=1; i<=m; i++){
c[x[i]][y[i]]+=infinit;
c[y[i]][x[i]]+=infinit;
if (bf())
rez.push_back(i);
c[x[i]][y[i]]-=infinit;
c[y[i]][x[i]]-=infinit;
}
ofstream fout ("critice.out");
fout << rez.size() << '\n';
for (unsigned int i=0; i<rez.size(); i++)
fout << rez[i] << '\n';
fout.close();
return 0;
}