dfs水过:

 /*
Name: NYOJ--42--一笔画问题
Author: shen_渊
Date: 18/04/17 15:22
Description: 这个题用并查集做,更好。在练搜索,试试手
本来用的vector存放边,结果,vector并不能当做数组,遍历的时候只能用迭代器
中间没有数据的部分读取会出错
输入
第一行只有一个正整数N(N<=10)表示测试数据的组数。
每组测试数据的第一行有两个正整数P,Q(P<=1000,Q<=2000),分别表示这个画中有多少个顶点和多少条连线。
(点的编号从1到P)
随后的Q行,每行有两个正整数A,B(0<A,B<P),表示编号为A和B的两点之间有连线。
输出
如果存在符合条件的连线,则输出"Yes",
如果不存在符合条件的连线,输出"No"。
*/
#include<bits/stdc++.h>
using namespace std;
void dfs(int);
int vis[];
int vec[][];
int outDegree[];
int N,P,Q,flag;
int main(){
int N;cin>>N;
while(N--){
flag = ;
memset(vec,,sizeof(vec));
memset(vis,,sizeof(vis));
memset(outDegree,,sizeof(outDegree));
cin>>P>>Q;
for(int i=; i<Q; ++i){
int x,y;cin>>x>>y;
vec[x][y] = vec[y][x] = ;
}
dfs();
int mark = ;
for(int i=; i<=P; ++i){
if(outDegree[i] == ){
mark = ;break;
}
if(outDegree[i]%)flag++;
}
if(mark)cout<<"No"<<endl;
else if(flag == || flag == )cout<<"Yes"<<endl;
else cout<<"No"<<endl;
}
return ;
}
void dfs(int i){
vis[i] = ;
for(int k=; k<=P; ++k){
if(vec[i][k]){
outDegree[i]++;
if(!vis[k])
dfs(k);
}
}
}

学到图论了,用并查集+欧拉做一次:

 /*
欧拉路径,无向图
1判断是否为连通图,
2判断奇点的个数为0或2按照题意,只要是欧拉回路或者通路都符合题意
*/
#include <iostream>
#include <cstring>
#include <vector>
#include <cstdio>
using namespace std;
int edge[];
struct DisjoinSet {
vector<int> father, rank; DisjoinSet(int n): father(n), rank(n) {
for (int i=; i<n; i++) {
father[i] = i;
}
} int easy_find(int v) {//非递归
int k, j, r;
r = v;
while (r!=father[r]) {
r = father[r];
}
k = v;
while (k!=r) {
j = father[k];
father[k] = r;
k = j;
}
return r;
}
void merge(int x, int y) {
int a = easy_find(x), b = easy_find(y);
if (rank[a] < rank[b]) {
father[a] = b;
} else {
father[b] = a;
if (rank[b] == rank[a]) {
++rank[a];
}
}
}
} ; int p, q;
int main()
{
// freopen("in.txt", "r", stdin);
int N;
scanf("%d", &N);
while (N--) {
memset(edge, , sizeof(edge));
scanf("%d %d", &p, &q);
DisjoinSet mfs();
for (int i=; i<q; i++) {
int a, b;
scanf("%d %d", &a, &b);
edge[a]++;
edge[b]++;
mfs.merge(a, b);
}
int father = mfs.easy_find();
int ct = ;
for (int i=; i<=p; i++) {
if (mfs.father[i] != father) {
ct = -;
break;
}
if (edge[i] & ) ct++;
}
if (ct == || ct == ) printf("Yes\n");
else printf("No\n");
}
return ;
}

NYOJ--42--dfs水过||并查集+欧拉通路--一笔画问题的更多相关文章

  1. Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash

    题意:给出很多很多很多很多个棒子 左右各有颜色(给出的是单词) 相同颜色的可以接在一起,问是否存在一种 方法可以使得所以棒子连在一起 思路:就是一个判欧拉通路的题目,欧拉通路存在:没奇度顶点   或者 ...

  2. Jzoj 初中2249 蒸发学水(并查集)

    题目描述 众所周知,TerryHu 是一位大佬,他平时最喜欢做的事就是蒸发学水. 机房的位置一共有n 行m 列,一开始每个位置都有一滴学水,TerryHu 决定在每一个时刻选择 一滴学水进行蒸发,直到 ...

  3. P1141 01迷宫 DFS (用并查集优化)

    题目描述 有一个仅由数字00与11组成的n \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻44格中的某一格11上,同样若你位于一格1上,那么你可以移动到相邻44格中的某一格00上 ...

  4. POJ 2513 无向欧拉通路+字典树+并查集

    题目大意: 有一堆头尾均有颜色的木条,要让它们拼接在一起,拼接处颜色要保证相同,问是否能够实现 这道题我一开始利用map<string,int>来对颜色进行赋值,好进行后面的并查操作以及欧 ...

  5. ACM/ICPC 之 DFS求解欧拉通路路径(POJ2337)

    判断是欧拉通路后,DFS简单剪枝求解字典序最小的欧拉通路路径 //Time:16Ms Memory:228K #include<iostream> #include<cstring& ...

  6. Intel Code Challenge Elimination Round (Div.1 + Div.2, combined) A B C D 水 模拟 并查集 优先队列

    A. Broken Clock time limit per test 1 second memory limit per test 256 megabytes input standard inpu ...

  7. hdu 5313 Bipartite Graph(dfs染色 或者 并查集)

    Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he wants ...

  8. HDU 5285 wyh2000 and pupil(dfs或种类并查集)

    wyh2000 and pupil Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/65536 K (Java/Other ...

  9. 图论-欧拉图-欧拉回路-Euler-Fluery-Hierholzer-逐步插入回路法-DFS详解-并查集

    欧拉图性质: 1.无向连通图G是欧拉图,当且仅当G不含奇数度结点(G的所有结点度数为偶数): 2.无向连通图G含有欧拉通路,当且仅当G有零个或两个奇数度的结点: 3.有向连通图D是欧拉图,当且仅当该图 ...

随机推荐

  1. jq 获取页面中checkbox已经选中的checkbox

    var array={}; var arrChk=$("input[name='bike']:checked"); if(arrChk.length<=0){ alert(' ...

  2. Shell Error: -bash: ./test.sh: /bin/bash^M: bad interpreter: No such file or directory (转)

    错误原因可能有以下几种: 1.在WIN底下用文本编辑工具修改过参数变量,在保存的时候没注意编码格式造成的, 2.也有可能是在VIM里修改,第一行末尾按到ctrl_v 查看文件是DOS格式.UNIX格式 ...

  3. python3读取HDA零售企业数据(一)

    #-*- coding:utf-8 -*- # 下载河南FDA各药品经营企业目录 import urllib.request import urllib.parse import re import ...

  4. vue2 本地安装

  5. ArcGIS API for JavaScript Bookmarks(书签)

    说明:本篇博文介绍的是ArcGIS API for JavaScript中的 Bookmarks(书签) ,书签的作用是,把地图放大到一个地方 添加书签,书签名称可以和地图名称一直,单击标签 地图会定 ...

  6. Modeling of Indoor Positioning Systems Based on Location Fingerprinting

    Kamol Kaemarungsi and Prashant Krishnamurthy Telecommunications Program School of Information Scienc ...

  7. spring AOP操作

    在spring进行AOP操作,使用aspectj实现 一.aspectj准备 aspectj不是spring的一部分,和spring一起使用进行AOP的操作 1.除了spring基本的jar包还需要导 ...

  8. linux 字符驱动

    1 结构体说明:     struct cdev {         struct kobject kobj;          // 每一个 cdev 都是一个 kobject         st ...

  9. 变量动态选取资源ID

    1.使用Resources 类的 getIdentifier方法  Resources res=getResources();        return res.getIdentifier(type ...

  10. 【深度学习】ubuntu16.04下安装opencv3.4.0

    1.首先安装一些编译工具 # 安装编译工具 sudo apt-get install build-essential # 安装依赖包 sudo apt-get install cmake git li ...