Pagini recente » Cod sursa (job #2149339) | Cod sursa (job #615445) | Cod sursa (job #1216843) | Cod sursa (job #667031) | Cod sursa (job #396546)
Cod sursa(job #396546)
using namespace std;
#include<vector>
#include<fstream>
const int MAX_N = 280;
#define pb push_back
vector<int>G[MAX_N], D[MAX_N];
int N, M, SOL;
int st[MAX_N], dr[MAX_N];
bool viz[MAX_N];
bool pairUp(int x)
{
if(viz[x]) return 0;
viz[x] = 1;
unsigned i; int y;
for(i = 0; i < G[x].size(); ++i)
{
y = G[x][i];
if( !st[y] )
{
st[y] = x;
dr[x] = y;
return 1;
}
}
for(i = 0; i < G[x].size(); ++i)
{
y = G[x][i];
if( pairUp( st[y] ))
{
st[y] = x;
dr[x] = y;
return 1;
}
}
return 0;
}
int main()
{
ifstream in("strazi.in"); ofstream out("strazi.out");
in>>N>>M;
int i, j, ok,x,y;
for(;M;--M)
{
in>>x>>y;
G[x].pb(y);
}
for(ok = 1; ok;)
{
ok = 0;
memset(viz,0, sizeof(viz));
for(i = 1; i <= N; ++i)
if(!dr[i])
ok |= pairUp(i);
}
for(i = 1; i <= N; ++i)
{
if(dr[i]) continue;
++SOL;
for(j = i; j; j = st[j])
D[SOL].pb(j);
}
out<<SOL-1<<"\n";
for(i = 1; i < SOL; ++i)
out<<D[i].front()<<" "<<D[i+1].back()<<"\n";
for(i = 1; i <= SOL; ++i)
for(j = D[i].size()-1; j >= 0; --j)
out<<D[i][j]<<" ";
return 0;
}