Pagini recente » Cod sursa (job #3277460) | Cod sursa (job #594167) | Cod sursa (job #2253126) | Cod sursa (job #2301018) | Cod sursa (job #2772758)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("critice.in");
ofstream fout("critice.out");
int n,i,m,T[1010],F,S[10010],nr,flux[1005][1005],flux2[1005][1005],C[1005][1005],x,y,z;
pair<int,int> v[1005];
queue<int> q;
bitset<1005> f;
vector<int> L[1005];
int bfs(){
f.reset();
q.push(1);
while(!q.empty()){
int nod=q.front();
f[nod]=1;
for(int i=0;i<L[nod].size();i++){
int vec=L[nod][i];
if(!f[vec]&&C[nod][vec]-flux[nod][vec]>0){
q.push(vec);
T[vec]=nod;
}
}
q.pop();
}
return f[n];
}
int flow(){
int sol=0;
while(bfs()){
for(int i=0;i<L[n].size();i++){
int nod=L[n][i];
if(C[nod][n]-flux[nod][n]>0&&f[nod]){
int vec=nod;
int minim=C[nod][n]-flux[nod][n];
while(nod!=1){
minim=min(minim,C[T[nod]][nod]-flux[T[nod]][nod]);
nod=T[nod];
}
nod=vec;
flux[nod][n]+=minim;
flux[n][nod]-=minim;
sol+=minim;
while(nod!=1){
flux[T[nod]][nod]+=minim;
flux[nod][T[nod]]-=minim;
nod=T[nod];
}
}
}
}
return sol;
}
void reset(){
for(int i=1;i<=m;i++){
int x=v[i].first;
int y=v[i].second;
flux[x][y]=flux2[x][y];
flux[y][x]=flux2[y][x];
}
}
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;
v[i].first=x;
v[i].second=y;
}
F=flow();
for(i=1;i<=m;i++){
x=v[i].first,y=v[i].second;
flux2[x][y]=flux[x][y];
flux2[y][x]=flux[y][x];
}
for(i=1;i<=m;i++){
x=v[i].first,y=v[i].second;
C[x][y]+=10000;
C[y][x]+=10000;
if(flow())
S[++nr]=i;
reset();
C[x][y]-=10000;
C[y][x]-=10000;
}
fout<<nr<<"\n";
for(i=1;i<=nr;i++)
fout<<S[i]<<"\n";
return 0;
}