题目
题面
蒟蒻不会拓扑
和bitset
,求助
代码
#include <bits/stdc++.h>
using namespace std;
int n, m;
vector<int> degr, ordr;
vector<bitset<30005>> cnct;
vector<vector<int>> edg;
void bfs()
{
queue<int> q;
for (int i = 1; i <= n; i++)
if (degr[i] == 0)
q.push(i);
while (!q.empty())
{
int t = q.front();
q.pop();
ordr.push_back(t);
for (auto targ : edg[t])
{
if ((--degr[targ]) == 0)
q.push(targ);
}
}
}
int main()
{
cin.tie(&cout)->sync_with_stdio(0);
cin >> n >> m;
edg.resize(n + 1);
degr.resize(n + 1);
cnct.resize(n + 1);
for (int i = 1; i <= m; i++)
{
int u, v;
cin >> u >> v;
edg[u].push_back(v);
degr[v]++;
}
bfs();
for (int i = 1; i <= n; i++)
cout << cnct[i].count() << '\n';
return 0;
}