• 【CCF】通信网络 简单搜索


    去重!不然有环就直接挂掉了...0分

    #include<iostream>
    #include<cstdio>
    #include<string>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    #include<queue>
    
    using namespace std;
    typedef long long ll;
    const int maxn=1e3+2;
    const int maxm=1e4+2;
    int n,m;
    bool vis[maxn][maxn];
    struct edge{
        int to;
        int nxt;
    }e[maxm];
    int head[maxn];
    int tot=0;
    void init(){
        memset(head,-1,sizeof(head));
        tot=0;
    }
    void add(int u,int v){
        e[tot].to=v;
        e[tot].nxt=head[u];
        head[u]=tot++;
    }
    void dfs(int fa,int u){
        for(int i=head[u];i!=-1;i=e[i].nxt){
            int v=e[i].to;
            if(vis[fa][v]) continue; 
            vis[fa][v]=true;
            dfs(fa,v);
        }
    }
    int work(){
        memset(vis,false,sizeof(vis));
        for(int i=1;i<=n;i++) vis[i][i]=true;
        for(int i=1;i<=n;i++){
            dfs(i,i);
        }
    //    for(int i=1;i<=n;i++){
    //        for(int j=1;j<=n;j++){
    //            cout<<vis[i][j]<<" ";
    //        }
    //        cout<<endl;
    //    }
        int ans=0;
        for(int i=1;i<=n;i++){
            int cnt=1;
            for(int j=1;j<=n;j++){
                if(i==j) continue;
                if(vis[i][j]) cnt++;
                else if(vis[j][i]) cnt++;
            }
            if(cnt==n) ans++;
        }
        return ans;
    }
    int main(){
        while(~scanf("%d%d",&n,&m)){
            init();
            int u,v;
            for(int i=1;i<=m;i++){
                scanf("%d%d",&u,&v);
                add(u,v);
            }
            int ans=work();
            printf("%d
    ",ans);
        }
        return 0;
    }
  • 相关阅读:
    内存溢出异常
    Java堆中的对象
    运行时数据区域
    字符串常量池
    自己编译JDK
    @PathVariable注解详解
    spring容器监听器
    redis和spring整合
    Redis安装、启动、关闭
    HDU3974 Assign the task
  • 原文地址:https://www.cnblogs.com/itcsl/p/9190715.html
Copyright © 2020-2023  润新知