HDU 5424 Rikka with Graph II
题目大意: 在 N 个点 N 条边组成的图中判断是否存在汉密尔顿路径。
思路:忽略重边与自回路,先判断是否连通,否则输出“NO”,DFS搜索是否存在汉密尔顿路径。
  #include<iostream>
  #include<cstdio>
  #include<cstdlib>
  #include<cstring>
  #include<queue>
  #include<algorithm>
  #include<cmath>
  #include<map>
  #include<vector>
  using namespace std;
  #define INF 0x7fffffff
  int n,ans,vis[1010],f[1010],cnt;
  vector<int> adj[1010];
  #define pii pair<int,int>
  map<pii,int> MAP; 
  int find(int x){
      return f[x] == x ? x : f[x] = find(f[x]);
  }
  void init(){
      int i;
      for(i=0;i<=n;i++){
          adj[i].clear();
	   f[i] = i;
      }
  } 
  void judge(int u) {
      vis[u] = 1;
      cnt ++;
      int d = adj[u].size();
      for(int i = 0; i < d; i ++) {
             int v = adj[u][i];
             if(!vis[v]) {
              judge(v);
             }
      }
  }
  bool DFS(int u, int cnt) {
      vis[u] = 1;
      if(cnt == n) return true;
      int d = adj[u].size();
      for(int i = 0; i < d; i ++) {
          int v = adj[u][i];
          if(!vis[v]) {
              if(DFS(v, cnt + 1)) return true;
              vis[v] = 0;
          }
      }
      return false;
  }   
  int main(){
     int i,j,a,b,x,y,degree[1010];
     while(scanf("%d",&n) == 1){
	      memset(degree,0,sizeof(degree));
	      MAP.clear();
	      init();
	      for(i=1;i<=n;i++){
		      scanf("%d%d",&a,&b);
		      if(MAP.find(make_pair(a,b)) == MAP.end() && MAP.find(make_pair(b,a)) == MAP.end() && a != b){
			      degree[a] ++;
			      degree[b] ++;
			      MAP[make_pair(a,b)] = 1;
			      MAP[make_pair(b,a)] = 1;
			      adj[a].push_back(b);
			      adj[b].push_back(a);
			      x = find(a);
			      y = find(b);
			      if(x != y)
				      f[x] = y;
		      }
	      }
	      int k,MIN = INF;
	      for(i=1;i<=n;i++)
	          if(degree[i] < MIN){
	    	      k = i;
	    	      MIN = degree[i];
	          }
	      int num2 = 0;
	      for(i=1;i<=n;i++){
		      if(degree[i] == 1)
		          num2 ++;
	      }
	      if(num2 > 2){
		      printf("NO\n");
		      continue ;
	      }
	      cnt = 0;
	      memset(vis,0,sizeof(vis));
	      judge(1);
	      if(cnt != n){
		      printf("NO\n");
	              continue;
	      }
	      memset(vis,0,sizeof(vis));
	      if(DFS(k,1))
	          printf("YES\n");
	      else
	          printf("NO\n");
            }
      return 0;
  }												
											HDU 5424 Rikka with Graph II的更多相关文章
- HDU 5424——Rikka with Graph II——————【哈密顿路径】
		
Rikka with Graph II Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Othe ...
 - hdu 5424 Rikka with Graph II (BestCoder Round #53 (div.2))(哈密顿通路判断)
		
http://acm.hdu.edu.cn/showproblem.php?pid=5424 哈密顿通路:联通的图,访问每个顶点的路径且只访问一次 n个点n条边 n个顶点有n - 1条边,最后一条边的 ...
 - hdu 5424 Rikka with Graph II(dfs+哈密顿路径)
		
Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, so h ...
 - HDU 5831 Rikka with Parenthesis II(六花与括号II)
		
31 Rikka with Parenthesis II (六花与括号II) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536 ...
 - HDU 5831 Rikka with Parenthesis II (栈+模拟)
		
Rikka with Parenthesis II 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5831 Description As we kno ...
 - hdu 5831 Rikka with Parenthesis II 线段树
		
Rikka with Parenthesis II 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5831 Description As we kno ...
 - HDU 5631 Rikka with Graph 暴力 并查集
		
Rikka with Graph 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5631 Description As we know, Rikka ...
 - HDU 5422   Rikka with Graph
		
Rikka with Graph Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) ...
 - HDU 6090 Rikka with Graph
		
Rikka with Graph 思路: 官方题解: 代码: #include<bits/stdc++.h> using namespace std; #define ll long lo ...
 
随机推荐
- ACM2036_改革春风吹满地(多边形面积计算公式)
			
用到的知识点: 代码如下: /* Input 输入数据包含多个测试实例,每个测试实例占一行,每行的开始是一个整数n(3<=n<=100),它表示多边形的边数(当然也是顶点数),然后是按照逆 ...
 - jquery之radio
			
<td class="queryTitle" width="80px">是否启用</td> <td class="que ...
 - 前端--关于HTML
			
在讲HTML之前不得不先简单粗略提一下浏览器以及浏览器与HTML的关系.众所周知,浏览器就是一个应用程序,这个应用程序可以完成网络调用.展示接收的html文档等.严格来讲HTML文档就是按照某个规则写 ...
 - 关于asp.net的<%#%>的一些总结
			
一.说明 asp特有的控件在前台绑定数据的语法,且必须要调用该控件的DataBind()方法才执行,也可以整个页面数据绑定. 二.注意 1.并不是只有服务器控件才可以使用该语法,当整个页面调用this ...
 - Javascript的块级作用域
			
一.块级作用域的说明 在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c. ...
 - asp.net 如何改变GridView搜索出来关键字的颜色?就像百度似的,我获得的是一个集合,改变集合中关键字的集合
			
输入“产量”查询,将“产量”拆分,产.量 string strColNameCnDt = string.Empty; for (int j = 0; j < dtTemp. ...
 - C#在使用串口读一长段数据时,前面加延时,等串口缓冲全部收到再去读
			
Thread.Sleep(3);//延时一会,等接受完成再去读
 - HDU 4612 (13年多校第二场1002)无向图缩点,有重边
			
这道题是多校的题,比赛的时候是一道纷纷水过的板刷题. 题意:给你一些无向边,只加一条边,使该图的桥最少,然后输出最少的桥. 思路:当时大致想到思路了,就是缩点之后找出最长的链,然后用总的桥数减去链上的 ...
 - Broadcom网卡linux系统下无法连接到网络问题(某种情况- -||)的解决办法
			
国际惯例,先闲扯: 其实我是个电脑白痴,至于为什么一个电脑白痴会来做开发呢?原因非常匪夷所思且简单--“因为做开发看起来很酷!”,那为什么要一把年纪了才来做开发呢?原因更简单,“当我回过神,就发现我已 ...
 - WordPress nginx环境下开启多站点
			
在wp-config.php插入 define('WP_ALLOW_MULTISITE', true); 进入管理页面安装网络,子目录模式按提示再在wp-config.php插入 define('MU ...