Pagini recente » Cod sursa (job #463180) | Cod sursa (job #1929830) | Cod sursa (job #1727918) | Cod sursa (job #1221190) | Cod sursa (job #1516611)
#include<fstream>
#include<vector>
#include<bitset>
using namespace std;
int n, m, i, x, y, z, nr, p, minim, nod, vecin;
int c[1005][1005], f[1005][1005], s[1005], t[1005], sol[10005], f1[2][1005];
vector<int> v[1005];
pair<int, int> w[10005];
bitset<1005> viz;
ifstream fin("critice.in");
ofstream fout("critice.out");
int bfs(){
int p, u, vecin, nod, i;
int ok = 0;
viz.reset();
viz[1] = 1;
p = u = 1;
s[1] = 1;
while(p <= u){
nod = s[p];
for(i = 0; i < v[nod].size(); i++){
vecin = v[nod][i];
if(viz[vecin] == 0 && f[nod][vecin] < c[nod][vecin]){
u++;
s[u] = vecin;
viz[vecin] = 1;
t[vecin] = nod;
if(vecin == n){
ok = 1;
}
}
}
p++;
}
return ok;
}
void bfs1(int start, int nr){
int p, u, vecin, nod, i;
viz.reset();
viz[start] = 1;
p = u = 1;
s[1] = start;
f1[nr][start] = 1;
while(p <= u){
nod = s[p];
for(i = 0; i < v[nod].size(); i++){
vecin = v[nod][i];
if(viz[vecin] == 0 && (f[nod][vecin] < c[nod][vecin] && f[vecin][nod] < c[nod][vecin])){
u++;
s[u] = vecin;
viz[vecin] = 1;
f1[nr][vecin] = 1;
t[vecin] = nod;
}
}
p++;
}
}
int main(){
fin>> n >> m;
for(i = 1; i <= m; i++){
fin>> x >> y >> z;
c[x][y] = z;
c[y][x] = z;
v[x].push_back(y);
v[y].push_back(x);
w[i].first = x;
w[i].second = y;
}
while(bfs()){
for(i = 0; i < v[n].size(); i++){
vecin = v[n][i];
if(viz[vecin] == 1 && f[vecin][n] < c[vecin][n]){
minim = c[vecin][n] - f[vecin][n];
p = vecin;
while(t[p] > 0){
minim = min(minim, c[ t[p] ][p] - f[ t[p] ][p]);
p = t[p];
}
f[vecin][n] += minim;
f[n][vecin] -= minim;
p = vecin;
while(t[p] > 0){
f[ t[p] ][p] += minim;
f[p][ t[p] ] -= minim;
p = t[p];
}
}
}
}
bfs1(1, 0);
bfs1(n, 1);
for(i = 1; i <= m; i++){
x = w[i].first;
y = w[i].second;
if(f[x][y] == c[x][y] && f1[0][x] == 1 && f1[1][y] == 1){
nr++;
sol[nr] = i;
}
else{
if(f[y][x] == c[y][x] && f1[0][y] == 1 && f1[1][x] == 1){
nr++;
sol[nr] = i;
}
}
}
fout<< nr <<"\n";
for(i = 1; i <= nr; i++){
fout<< sol[i] <<"\n";
}
return 0;
}