zoukankan      html  css  js  c++  java
  • ZOJ 3811

    http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5343

    网络赛这水题没写过太伤了,赛后写了下1A。

    当时钻牛角尖一定要用k次bfs,其实一次就够了,把扩展到的节点插入set中,复杂度nlogn

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <set>
    #include <vector>
    #include <queue>
    using namespace std ;
    
    vector <int> mp[100005] ;
    set <int> s ;
    int idx[100005] ;
    int vis[100005] ;
    int node[100005] ;
    int find(int x)
    {
        return idx[x]==x?x:idx[x]=find(idx[x]) ;
    }
    
    int n,m,k ;
    int flag[100005] ;
    
    int main()
    {
        int T ;
        scanf("%d",&T) ;
        while(T--)
        {
            scanf("%d%d%d",&n,&m,&k) ;
            memset(flag,0,sizeof(flag)) ;
            for(int i=0 ;i<100005 ;i++)
                mp[i].clear() ;
            s.clear() ;
            memset(vis,0,sizeof(vis)) ;
            for(int i=1 ;i<=n ;i++)
                idx[i]=i ;
            for(int i=0 ;i<k ;i++)
            {
                int x ;
                scanf("%d",&x) ;
                flag[x]=1 ;
            }
            int ff=1 ;
            while(m--)
            {
                int a,b ;
                scanf("%d%d",&a,&b) ;
                mp[a].push_back(b) ;
                mp[b].push_back(a) ;
                int p=find(a) ;
                int q=find(b) ;
                if(p!=q)
                    idx[p]=q ;
            }
            for(int i=2 ;i<=n ;i++)
            {
                if(find(idx[1])!=find(idx[i]))
                {
                    ff=0 ;
                    break ;
                }
            }
            int L ;
            scanf("%d",&L) ;
            if(L!=k)ff=0 ;
            for(int i=0 ;i<L ;i++)
                scanf("%d",&node[i]) ;
            queue <int> q ;
            s.insert(node[0]) ;
            for(int j=0 ;j<L ;j++)
            {
                if(s.find(node[j])!=s.end())
                {
                    q.push(node[j]) ;
                    vis[node[j]]=1 ;
                    while(!q.empty())
                    {
                        int u=q.front() ;
                        q.pop() ;
                        for(int i=0 ;i<mp[u].size() ;i++)
                        {
                            if(!vis[mp[u][i]])
                            {
                                vis[mp[u][i]]=1 ;
                                if(flag[mp[u][i]])
                                {
                                    s.insert(mp[u][i]) ;
                                }
                                else
                                {
                                    q.push(mp[u][i]) ;
                                }
                            }
                        }
                    }
                    continue ;
                }
                else
                {
                    ff=0 ;
                    break ;
                }
            }
            if(ff)puts("Yes") ;
            else puts("No") ;
        }
        return 0 ;
    }
    View Code

  • 相关阅读:
    MFC的奇异non-modality模态对话框
    用于对话框,窗体视图,对话框和属性类型的布局管理器
    在。net中定制OpenFileDialog
    NFS的使用
    snmp-get
    zabbix-trap
    部署
    /etc/rc.local
    gj的交换机在升级了ios之后最新数据不刷新,
    计算型监控项
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/3963954.html
Copyright © 2011-2022 走看看