NYOJ--42--dfs水过||并查集+欧拉通路--一笔画问题
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水过||并查集+欧拉通路--一笔画问题的更多相关文章
- Colored Sticks POJ - 2513 并查集+欧拉通路+字典树hash
题意:给出很多很多很多很多个棒子 左右各有颜色(给出的是单词) 相同颜色的可以接在一起,问是否存在一种 方法可以使得所以棒子连在一起 思路:就是一个判欧拉通路的题目,欧拉通路存在:没奇度顶点 或者 ...
- Jzoj 初中2249 蒸发学水(并查集)
题目描述 众所周知,TerryHu 是一位大佬,他平时最喜欢做的事就是蒸发学水. 机房的位置一共有n 行m 列,一开始每个位置都有一滴学水,TerryHu 决定在每一个时刻选择 一滴学水进行蒸发,直到 ...
- P1141 01迷宫 DFS (用并查集优化)
题目描述 有一个仅由数字00与11组成的n \times nn×n格迷宫.若你位于一格0上,那么你可以移动到相邻44格中的某一格11上,同样若你位于一格1上,那么你可以移动到相邻44格中的某一格00上 ...
- POJ 2513 无向欧拉通路+字典树+并查集
题目大意: 有一堆头尾均有颜色的木条,要让它们拼接在一起,拼接处颜色要保证相同,问是否能够实现 这道题我一开始利用map<string,int>来对颜色进行赋值,好进行后面的并查操作以及欧 ...
- ACM/ICPC 之 DFS求解欧拉通路路径(POJ2337)
判断是欧拉通路后,DFS简单剪枝求解字典序最小的欧拉通路路径 //Time:16Ms Memory:228K #include<iostream> #include<cstring& ...
- 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 ...
- hdu 5313 Bipartite Graph(dfs染色 或者 并查集)
Problem Description Soda has a bipartite graph with n vertices and m undirected edges. Now he wants ...
- HDU 5285 wyh2000 and pupil(dfs或种类并查集)
wyh2000 and pupil Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Other ...
- 图论-欧拉图-欧拉回路-Euler-Fluery-Hierholzer-逐步插入回路法-DFS详解-并查集
欧拉图性质: 1.无向连通图G是欧拉图,当且仅当G不含奇数度结点(G的所有结点度数为偶数): 2.无向连通图G含有欧拉通路,当且仅当G有零个或两个奇数度的结点: 3.有向连通图D是欧拉图,当且仅当该图 ...
随机推荐
- 2017年Android百大框架排行榜(转)
一.榜单介绍 排行榜包括四大类: 单一框架:仅提供路由.网络层.UI层.通信层或其他单一功能的框架 混合开发框架:提供开发hybrid app.h5与webview结合能力.web app能力的框架 ...
- windows下XAMPP安装php_memcache扩展
windows下XAMPP安装php_memcache扩展 首先下载phpmemcache,地址为: http://up.2cto.com/2012/0522/20120522094758371.ra ...
- EasyDSS流媒体解决方案实现的RTMP/HLS视频直播、直播鉴权(如何完美将EasyDSS过渡到新版)
上一篇博文介绍了EasyDSS点播功能,然后作为RTMP流媒体服务器,接受RTMP推流.进行实时的直播流分发又是自身一大核心功能. 需求背景: 写本篇博文的一个目的是向大家介绍一下EasyDSS新版的 ...
- 网站存储session的方案
1: ASP.NET State Service是什么 用来管理 Session 的,正常来说,Session 位于IIS进程中(其实可以理解成在服务器的内存中),当IIS重启或程序池回收会自动清空S ...
- 忘记apple id如何更新应用?
最近ytkah的app有很多更新提示,之前注册的apple id好久没登录了,突然提示说登录需要验证安全问题,哪还记得噢,最要命的是邮箱收到的加密邮件也需要验证.重新注册一个吧,这次要注意保存相关信息 ...
- MYSQL:基础——事务处理
MYSQL:基础——事务处理 事物处理 1.什么是事物处理 事务处理(transaction processing)可以用来维护数据库的完整性,它保证成批的MySQL操作要么完全执行,要么完全不执行 ...
- 3.16课·········C#小结
//附加//C#源码,被C#编译器,编译成执念代码(IL)//int16=short.....±32000//int32=int.......±21亿//int64=long......±922亿亿3 ...
- js 动态加载事件的几种方法总结
本篇文章主要是对js 动态加载事件的几种方法进行了详细的总结介绍,需要的朋友可以过来参考下,希望对大家有所帮助 有些时候需要动态加载javascript事件的一些方法往往我们需要在 JS 中动态添 ...
- es6对象内函数的两种写法
es6对象内函数一般有两种写法: var person1 = { name: "p1", sayThis() { console.log(this); } }; var perso ...
- runtime 实现方法交换 viewwillappear方法
1.新建分类 #import "UIViewController+swizzling.h"#import <objc/runtime.h> @implementatio ...