Cod sursa(job #1945780)

Utilizator stefzahZaharia Stefan Tudor stefzah Data 29 martie 2017 17:53:36
Problema Critice Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.8 kb
#include <fstream>
#include <queue>
#include <algorithm>
#include <cstring>
#include <iostream>
#include <vector>
#define INF 1000000000
using namespace std;
ifstream fin("critice.in");
ofstream fout("critice.out");
int n,m,j,z,x,y,c,q,t[1005],fmn,ct,flow,s[5005],p[1005][1005];
int d[1005][1005],f[1005][1005],dmax[1005];
vector <int> v[1005];
bool viz[1005];
queue <int>C;
void BFS()
 {int i;
  memset(viz,0,sizeof(viz));
  C.push(1);
  viz[1]=1;
  while(!C.empty())
    {c=C.front();
     C.pop();
     if(c==n)continue;
     for(i=0;i<v[c].size();i++)
        {q=v[c][i];
         if(viz[q]==0&&d[c][q]!=f[c][q])
           {viz[q]=1;
            C.push(q);
            t[q]=c;
           }
        }
    }
 }
int main()
{int i;
 fin>>n>>m;
 for(i=1;i<=m;i++)
    {fin>>x>>y>>z;
     v[x].push_back(y);
     v[y].push_back(x);
     d[x][y]=z;
     d[y][x]=z;
     dmax[x]+=z;
     dmax[y]+=z;
     p[x][y]=i;
     p[y][x]=i;
    }
    BFS();
 while(viz[n]==1)
      {for(i=0;i<v[n].size();i++)
          {fmn=INF;
           if(viz[v[n][i]]==1&&d[v[n][i]][n]!=f[v[n][i]][n])
           {t[n]=v[n][i];
            q=n;
             while(q!=1)
                   {fmn=min(fmn,d[t[q]][q]-f[t[q]][q]);
                    q=t[q];
                   }
           q=n;
             while(q!=1)
                   {f[t[q]][q]+=fmn;
                    f[q][t[q]]-=fmn;
                    q=t[q];
                   }
           }
           if(fmn!=INF)flow+=fmn;
          }
       BFS();
     }
     for(i=1;i<=n;i++)
        {for(j=1;j<=n;j++)
            {if(f[i][j]==d[i][j]&&d[i][j]!=0&&dmax[j]-f[i][j]>f[i][j]){ct++;s[ct]=p[i][j];}
            }
        }
    fout<<ct<<"\n";
    sort(s+1,s+ct+1);
    for(i=1;i<=ct;i++)
       {fout<<s[i]<<"\n";
       }
}