Pagini recente » Cod sursa (job #953832) | Cod sursa (job #2364264) | Cod sursa (job #1145603) | Cod sursa (job #899031) | Cod sursa (job #1491414)
#include <bits/stdc++.h>
using namespace std;
int n, m, x, y;
int viz[100005];
int viz2[100005];
int V[100005];
struct node{
node *next;
int inf;
};
node *L[100005];
void add(node *&start, int inf) {
node *one = new node;
one->inf = inf;
one->next = start;
start = one;
}
int nr;
void dfs(int in) {
viz[in] = 1;
for(node *p = L[in]; p; p = p->next) {
if(!viz[p->inf])
dfs(p->inf);
}
}
int main()
{
FILE *f = fopen("ctc.in", "r");
FILE *g = fopen("ctc.out", "w");
fscanf(f, "%d %d", &n, &m);
for(int i = 1; i <= m; i ++) {
fscanf(f, "%d %d", &x, &y);
add(L[x], y);
}
for(int i = 1; i < n; i ++) {
for(int j = i + 1; j <= n; j++) {
for(int k = 1; k <= n; k ++)
viz[k] = 0;
dfs(i);
if(viz[i] && viz[j]) {
for(int k = 1; k <= n; k ++) {
viz[k] = 0;
}
dfs(j);
if(viz[i] && viz[j]) {
if(V[i])
V[j] = V[i];
else if(V[j])
V[i] = V[j];
else nr ++, V[i] = nr, V[j] = nr;
}
}
}
}
fprintf(g, "%d\n", nr);
for(int k = 1; k <= nr; k ++) {
for(int i = 1; i <= n; i ++) {
if(V[i] == k) {
fprintf(g, "%d ", i);
}
}
fprintf(g, "\n");
}
return 0;
}