• zoj3321 circle floyd 最小生成树


                                                          Circle 

                                                                  断一个图是否是一个环。


                                        思路:必有m==n,那么我们用n-1条边能够生成一棵树(即是所有点联通,则用floyd即可),然后看最后一条边的两个点是否是单边(度为一)即可 。


    #include<cstdio>
    #include<cstdlib>
    #include<iostream>
    #include<memory.h>
    using namespace std;
    int du[20],n,m,fa[20];
    int x[20],y[20];
    bool map[20][20];
    void _update()
    {
    	  memset(du,0,sizeof(du)); 
    	  for(i=1;i<=n;i++) 
    	   for(j=1;j<=n;j++)
    	    map[i][j]=false;
    }
    bool _solve(){
    	for(int i=1;i<m;i++) {
    		du[x[i]]++;du[y[i]]++;
    		map[x[i]][y[i]]=true;
    		map[y[i]][x[i]]=true;
    	}
        for(int k=1;k<=n;k++)
         for(int i=1;i<=n;i++)
          for(int j=1;j<=n;j++)
           if(map[i][k]&&map[k][j]) {
            map[i][j]=true;
            map[j][i]=true;
    	}
        for(int i=1;i<n;i++)
         for(int j=i+1;j<=n;j++)
          if(!map[i][j])return false;
        if(du[x[n]]%2==0) return false;
        if(du[y[n]]%2==0) return false;
    	return true;
    }
    int main()
    {
    	int i,j;
    	while(cin>>n>>m){
    	  _update();
    	  for(i=1;i<=m;i++) cin>>x[i]>>y[i];
    	  if(n!=m||n==2) cout<<"NO"<<endl;
    	  else if(_solve())cout<<"YES"<<endl;
    	  else cout<<"NO"<<endl;
    	}
    	 return 0;
    }


  • 相关阅读:
    前端 HTML
    python3内置函数
    内置函数的随机验证码
    线程、进程以及协程,上下文管理器
    线程池的定义方法
    python_控制台输出带颜色的文字方法
    while 循环 continue break 用法例子
    JVM 基础知识
    ios 设置状态栏文本颜色为白色
    ios 常用第三方库要加的framework,ARC的设置
  • 原文地址:https://www.cnblogs.com/hua-dong/p/7603955.html
Copyright © 2020-2023  润新知