Pagini recente » Cod sursa (job #1527877) | Cod sursa (job #107156) | Cod sursa (job #43035) | Cod sursa (job #484395) | Cod sursa (job #2958636)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("strazi.in");
ofstream fout("strazi.out");
int n, m, in[256];
vector <int> g[256];
struct edge {
int x, y;
};
vector <edge> add;
vector <int> r;
int main() {
fin >> n >> m;
for (int i = 1; i <= m; i++)
{
int x, y;
fin >> x >> y;
g[x].push_back(y);
in[y]++;
}
vector <int> A, B;
for (int i = 1; i <= n; i++)
if (in[i] == 0)
A.push_back(i);
while (A.size())
{
B.clear();
r.push_back(A[0]);
for (auto& i : g[A[0]])
if (in[i] == 1)
B.push_back(i), in[i] = 0;
else
in[i]--;
for (int i = 1; i < A.size(); i++)
{
add.push_back({ A[i - 1], A[i] }), r.push_back(A[i]);
for (auto& i : g[A[i]])
if (in[i] == 1)
B.push_back(i), in[i] = 0;
else
in[i]--;
}
swap(A, B);
}
fout << add.size() << '\n';
for (auto& i : add)
fout << i.x << ' ' << i.y << '\n';
for (auto& i : r)
fout << i << ' ';
return 0;
}