Pagini recente » Cod sursa (job #2105885) | Cod sursa (job #2792077) | Cod sursa (job #852536) | Cod sursa (job #182397) | Cod sursa (job #1430373)
#include <iostream>
#include <fstream>
#include <stack>
#include <vector>
using namespace std;
int n,**m,*v;
stack<int> s;
void dfs(int x) {
v[x] = 1;
int i;
for (i=1;i<=n;i++) {
if (!v[i] && m[x][i] == 1) {
dfs(i);
}
}
s.push(x);
}
int main()
{
int i,j,x,y,c = 0;
ifstream f("ctc.in");
f>>n>>i;
v = new int[n+1];
for (i=1;i<=n;i++) v[i] = 0;
m = new int*[n+1];
for (i=1;i<=n;i++) m[i] = new int[n+1];
for (i=1;i<=n;i++)
for (j=1;j<=n;j++) m[i][j] = 0;
while (f>>x>>y) m[x][y] = 1;
f.close();
for (i=1;i<=n;i++)
if (!v[i]) dfs(i);
for (i=1;i<=n;i++)
for (j=1;j<=n;j++)
if (m[i][j] == 1 && m[j][i] == 0) {
m[i][j]++;
m[j][i] = 1;
}
stack<int> s1 = stack<int>(s);
stack<int> s2 = stack<int>(s);
stack<int> *p;
ofstream g("ctc.out");
int sw = 0;
while (sw < 2) {
for (i=1;i<=n;i++) v[i] = 0;
if (!sw) p = &s1;
else p = &s2;
while (!p->empty()) {
while (!s.empty()) s.pop();
x = p->top();
p->pop();
if (v[x]) continue;
dfs(x);
if (sw) {
while (!s.empty()) {
g<<s.top()<<" ";
s.pop();
}
g<<endl;
}
else c++;
}
sw++;
if (sw == 1) g<<c<<endl;
}
g.close();
return 0;
}