F 核弹剑仙
核弹剑仙
https://ac.nowcoder.com/acm/contest/6874/F
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; } }