Pagini recente » Cod sursa (job #726061) | Cod sursa (job #2215381) | Borderou de evaluare (job #2247265) | Cod sursa (job #1298766) | Cod sursa (job #1519412)
#define DIM 105
#include <fstream>
#include <algorithm>
#include <vector>
#include <bitset>
#include <queue>
using namespace std;
ifstream fin("ghizi.in");
ofstream fout("ghizi.out");
int N, K, flux;
vector <int> v[DIM];
queue <int> Q;
int F[DIM][DIM],C[DIM][DIM];
int T[DIM];
bitset <DIM> U;
vector <int> Sol;
pair <int,int> z[5005];
int bfs(){
U.reset();
U[101]=1;
Q.push(101);
while(!Q.empty()){
int node = Q.front();
Q.pop();
for(int i=0;i<v[node].size();i++){
int vec = v[node][i];
if(!U[vec] && C[node][vec] > F[node][vec]){
T[vec]=node;
U[vec]=1;
Q.push(vec);
}
}
}
return U[100];
}
int main(){
fin >> N >> K;
for(int i=1;i<=N;i++){
int x,y;
fin >> x >> y;
v[x].push_back(y);
v[y].push_back(x);
C[x][y]++;
z[i] = make_pair(x,y);
}
C[101][0]=K;
v[101].push_back(0);
v[0].push_back(101);
while(bfs()){
int minim = 0x3f3f3f3f;
int u = 100;
while(u!=101){
if(minim > C[T[u]][u] - F[T[u]][u])
minim = C[T[u]][u] - F[T[u]][u];
u=T[u];
}
u = 100;
while(u!=101){
F[T[u]][u] += minim;
F[u][T[u]] -= minim;
u=T[u];
}
}
for(int i=1;i<=N;i++){
if(F[z[i].first][z[i].second]){
Sol.push_back(i);
F[z[i].first][z[i].second]--;
}
}
fout << Sol.size() << "\n";
for(int i=0;i<Sol.size();i++)
fout << Sol[i] << " ";
}