Pagini recente » Cod sursa (job #2259763) | Cod sursa (job #2563165) | Cod sursa (job #2597826) | Cod sursa (job #2416756) | Cod sursa (job #2772812)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("critice.in");
ofstream fout("critice.out");
int n,i,m,T[1010],F,a[1005][1005],S[10010],nr,flux[1005][1005],flux2[1005][1005],C[1005][1005],x,y,z;
int crt_verif1,crt_verif2,verif[1005][1005],ant,crt;
pair<int,int> v[10005];
queue<int> q;
bitset<1005> f,f1;
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];
}
void 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];
}
}
}
}
}
void bfs1(){
f[1]=1;
q.push(1);
while(!q.empty()){
int nod=q.front();
for(int i=0;i<L[nod].size();i++){
int vec=L[nod][i];
if(!f[vec]&&C[nod][vec]-flux[nod][vec]>0){
f[vec]=1;
q.push(vec);
}
}
q.pop();
}
}
void bfs2(){
f1[n]=1;
q.push(n);
while(!q.empty()){
int nod=q.front();
for(int i=0;i<L[nod].size();i++){
int vec=L[nod][i];
if(!f1[vec]&&C[vec][nod]-flux[vec][nod]>0){
f1[vec]=1;
q.push(vec);
}
}
q.pop();
}
}
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;
}
flow();
f.reset();
bfs1();
bfs2();
for(i=1;i<=m;i++){
x=v[i].first,y=v[i].second;
if((f[x]&&f1[y])||(f[y]&&f1[x]))
if((C[x][y]-flux[x][y]==0)||(C[y][x]-flux[y][x]==0))
S[++nr]=i;
}
fout<<nr<<"\n";
for(i=1;i<=nr;i++)
fout<<S[i]<<"\n";
return 0;
}