Pagini recente » Cod sursa (job #836825) | Cod sursa (job #2472362) | Cod sursa (job #490081) | Cod sursa (job #883281) | Cod sursa (job #979871)
Cod sursa(job #979871)
# include <iostream>
# include <fstream>
# include <vector>
# include <queue>
# include <bitset>
using namespace std;
# define MAXN 50010
# define MAXM 100010
ifstream f("sortaret.in");
ofstream g("sortaret.out");
int n, m;
vector<pair<int, int> > G[MAXN];
queue<int> coada;
bitset<MAXN> viznod;
int sol[MAXN], k, kmax, poz;
int bfs(int nod)
{
k = 0;
for (int i = 1; i <= n; i++) {
viznod[i] = false;
}
viznod[nod] = true;
coada.push(nod);
while (!coada.empty()) {
int nd = coada.front();
coada.pop();
k++;
sol[k] = nd;
for (int i = 0; i < G[nd].size(); i++) {
if (viznod[G[nd][i].first] == false){
coada.push(G[nd][i].first);
viznod[G[nd][i].first] = true;
}
}
}
}
int main()
{
f >> n >> m;
for (int i = 1; i <= m; i++) {
int x, y;
f >> x >> y;
G[x].push_back(make_pair(y, i));
}
for (int i = 1; i <= n; i++) {
bfs(i);
if (kmax < k) {
kmax = k;
poz = i;
}
}
k = 0;
bfs(poz);
for (int i = 1; i <= k; i++) {
g << sol[i] << ' ';
viznod[sol[i]] = true;
}
for (int i = 1; i <= n; i++) {
if (viznod[i] == false) {
g << i << ' ';
}
}
return 0;
}