Mai intai trebuie sa te autentifici.
Cod sursa(job #2506134)
| Utilizator | Data | 7 decembrie 2019 16:11:16 | |
|---|---|---|---|
| Problema | Critice | Scor | 70 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.26 kb |
#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;
}
