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;
    }
}
全部评论

相关推荐

10-09 22:05
666 C++
找到工作就狠狠玩CSGO:报联合国演讲,报电子烟设计与制造
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务