F 核弹剑仙
用链式前向星存图,威力小的指向威力大的。
用每一个节点遍历全图,看能遍历几个点即可。
注意:要用标记是否走过
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
#define IOS ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
const int maxn=1e4+10;
struct Edge
{
int u, v, next;
}edge[maxn<<2];
int head[maxn];
int cnt;
void add_edge(int u, int v)
{
edge[cnt].u = u;
edge[cnt].v = v;
edge[cnt].next = head[u];
head[u] = cnt++;
}
int n,m,x,y,ans,vis[maxn];
int solve(int x)
{
for(int i=head[x];i!=-1;i=edge[i].next)
{
int v=edge[i].v;
if(vis[v]) continue;
vis[v]=1;
ans++;
solve(v);
}
return ans;
}
int main()
{
IOS;
memset(head, -1, sizeof(head));
cin>>n>>m;
while(m--){
cin>>x>>y;
add_edge(y, x);
}
for(int i=1;i<=n;i++){
ans=0;
memset(vis, 0, sizeof(vis));
cout<<solve(i)<<endl;
}
} 
京公网安备 11010502036488号