Cod sursa(job #2690003)

Utilizator Cezar211Popoveniuc Cezar Cezar211 Data 22 decembrie 2020 19:29:34
Problema Critice Scor 40
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define NM 1005
using namespace std;
ifstream fin ("critice.in");
ofstream fout ("critice.out");
vector<int> v[NM];
int n, m, f[NM][NM], c[NM][NM];
int t[NM];
int muchii[NM][NM];
void read();
set<int> rez;
bool bfs()
{
    for(int i=1; i<=n; i++)
        t[i] = 0;
    queue<int> q;
    q.push(1);
    t[1] = 1;
    while(!q.empty())
    {
        int nod = q.front();
        q.pop();
        for(auto it:v[nod])
            if(!t[it] and c[nod][it] - f[nod][it] > 0)
            {
                t[it] = nod;
                if(it!=n)
                    q.push(it);
            }
    }
    if(t[n])
        return 1;
    return 0;
}
int flux()
{
    int flow = 0;
    while(bfs())
    {
        for(auto it:v[n])
            if(t[it] and c[it][n] - f[it][n] > 0)
            {
                int flow_cur = INF;
                t[n] = it;

                for(int nod = n; nod!=1; nod = t[nod])
                    flow_cur = min(flow_cur, c[t[nod]][nod] - f[t[nod]][nod]);
                if(flow_cur > 0)
                    for(int nod = n; nod!=1; nod = t[nod])
                        f[t[nod]][nod]+=flow_cur, f[nod][t[nod]]-=flow_cur;
                flow+=flow_cur;
            }
    }
    return flow;

}
int main()
{
    read();
    flux();

    bfs();
    for(int i=1; i<=n; i++)
        if(t[i])
        {
            for(auto it:v[i])
                if(!t[it] and c[i][it] - f[i][it] <= 0)
                    rez.insert(muchii[i][it]);
        }
    fout << rez.size() << '\n';
    for(auto it:rez)
        fout << it << '\n';

    return 0;
}
void read()
{
    fin >> n >> m;
    for(int i=1; i<=m; i++)
    {
        int x, y, cap;
        fin >> x >> y >> cap;
        muchii[x][y] = muchii[y][x] = i;
        v[x].push_back(y);
        v[y].push_back(x);
        c[x][y] = cap;
    }
}