Pagini recente » Cod sursa (job #2857798) | Cod sursa (job #718032) | Cod sursa (job #2775285) | Cod sursa (job #204763) | Cod sursa (job #907112)
Cod sursa(job #907112)
#include<fstream>
#include<queue>
using namespace std;
int i,j,n,m,t[1001][1001],fl[1001][1001],flux,min1,aux;
int tata[1001],rez[1001],nr=0;
bool viz[1001];
queue<int> q;
struct costuri
{
int x,y,cost;
};
costuri a[1001];
int bf()
{
int i,x;
for(i=1;i<=n;++i)
viz[i]=0;
q.push(1);
while(!q.empty())
{
x=q.front();
for(i=1;i<=n;++i)
if(t[x][i]-fl[x][i]>0&&!viz[i])
{
viz[i]=1;
tata[i]=x;
q.push(i);
}
q.pop();
}
return viz[n];
}
int main()
{
ifstream f("critice.in");
ofstream g("critice.out");
f>>n>>m;
for(i=1;i<=m;++i)
{
f>>a[i].x>>a[i].y>>a[i].cost;
t[a[i].x][a[i].y]=t[a[i].y][a[i].x]=a[i].cost;
}
while(bf())
{
for(i=1;i<=n;++i)
if(t[i][n]-fl[i][n]>0)
{
min1=t[i][n]-fl[i][n];
for(j=i;j!=1;j=tata[j])
if(t[tata[j]][j]-fl[tata[j]][j]<min1)
min1=t[tata[j]][j]-fl[tata[j]][j];
for(j=i;j!=1;j=tata[j])
{
fl[tata[j]][j]+=min1;
fl[j][tata[j]]-=min1;
}
fl[i][n]+=min1;
fl[n][i]-=min1;
flux+=min1;
}
}
int k;
for(k=1;k<=m;++k)
{
++t[a[k].x][a[k].y];
++t[a[k].y][a[k].x];
aux=0;
for(int t=1;t<=n;++t)
for(int k=1;k<=n;++k)
fl[t][k]=0;
while(bf())
{
for(i=1;i<=n;++i)
if(t[i][n]-fl[i][n]>0)
{
min1=t[i][n]-fl[i][n];
for(j=i;j!=1;j=tata[j])
if(t[tata[j]][j]-fl[tata[j]][j]<min1)
min1=t[tata[j]][j]-fl[tata[j]][j];
for(j=i;j!=1;j=tata[j])
{
fl[tata[j]][j]+=min1;
fl[j][tata[j]]-=min1;
}
fl[i][n]+=min1;
fl[n][i]-=min1;
aux+=min1;
}
}
--t[a[k].x][a[k].y];
--t[a[k].y][a[k].x];
if(aux!=flux)
rez[++nr]=k;
}
g<<nr<<"\n";
for(i=1;i<=nr;++i)
g<<rez[i]<<"\n";
return 0;
}