题目链接:https://cn.vjudge.net/problem/HDU-1878

题意

中文题,而且就是单纯的欧拉回路

思路

  1. 判断连通图

    用并查集会很好,bfs亦可

    一时脑抽用bfs过了这个题,数据还是太弱
  2. 出度==入度

代码

并查集查连通

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=1000;
struct Node{
int parent, rank;
Node(int parent=0, int rank=0):
parent(parent), rank(rank) {}
}node[maxn+5];
int n;
int find(int x){
return (node[x].parent==x)?x:(node[x].parent=find(node[x].parent));
} void join(int a, int b){
a=find(a); b=find(b);
if (a==b) return;
if (node[a].rank==node[b].rank) node[a].rank++;
if (node[a].rank>node[b].rank) node[b].parent=a;
else node[a].parent=b;
} bool connect(void){
for (int i=2; i<=n; i++)
if (find(1)!=find(i)) return false;
return true;
} int main(void){
while (scanf("%d", &n)==1 && n){
int m, cnt=0, vis[maxn+5]={0};
bool set[maxn+5]={false};
for (int i=1; i<=n; i++) node[i]=Node(i, 0); scanf("%d", &m);
for (int i=0, a, b; i<m; i++){
scanf("%d%d", &a, &b);
join(a, b);
vis[a]++; vis[b]++;
} int flag=false;
for (int i=1; i<=n; i++)
if (vis[i]%2) {flag=true; break;}
if (flag==false && !connect()) flag=true;
printf("%d\n", (flag)?0:1);
} return 0;
}

BFS查连通

#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;
const int maxn=1000;
struct Edge{
int from, to;
bool vis;
Edge(int from=0, int to=0, int vis=false):
from(from), to(to), vis(vis) {}
};
vector<Edge> edge;
vector<int> G[maxn+5];
int n;
inline void addEdge(int from, int to){
edge.push_back(Edge(from, to, false));
G[from].push_back(edge.size()-1);
G[to].push_back(edge.size()-1);
} bool connective(void){
int cnt=1; bool vis[maxn+5]={false};
queue<int> que;
que.push(1); vis[1]=true;
while (que.size()){
int from=que.front(); que.pop();
if (cnt==n) return true;
for (int i=0; i<G[from].size(); i++){
Edge &e=edge[G[from][i]];
int to=(e.to==from)?e.from:e.to;
if (e.vis) continue;
vis[to]=true; e.vis=true; cnt++;
que.push(to);
}
}return false;
} int main(void){
while (scanf("%d", &n)==1 && n){
int m, vis[maxn+5]={0};
memset(G, 0, sizeof(G)); scanf("%d", &m);
for (int i=0, a, b; i<m; i++){
scanf("%d%d", &a, &b);
addEdge(a, b);// G[a][b]++; G[b][a]++;
vis[a]++; vis[b]++;
} int flag=false;
for (int i=1; i<=n; i++)
if (vis[i]%2) {flag=true; break;}
if (flag==false && connective()==0) flag=true;
printf("%d\n", (flag)?0:1);
} return 0;
}

并查集

Time Memory Length Lang Submitted
93ms 1524kB 1198 G++ 2018-03-14 17:22:31

BFS

Time Memory Length Lang Submitted
124ms 7016kB 1445 G++ 2018-03-14 17:03:18

HDU-1878 欧拉回路 欧拉回路的更多相关文章

  1. HDU 1878 欧拉回路(判断欧拉回路)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1878 题目大意:欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一 ...

  2. HDU 1878 欧拉回路

    并查集水题. 一个图存在欧拉回路的判断条件: 无向图存在欧拉回路的充要条件 一个无向图存在欧拉回路,当且仅当该图所有顶点度数都是偶数且该图是连通图. 有向图存在欧拉回路的充要条件 一个有向图存在欧拉回 ...

  3. HDU 1878 欧拉回路 图论

    解题报告:题目大意,给出一个无向图,判断图中是否存在欧拉回路. 判断一个无向图中是否有欧拉回路有一个充要条件,就是这个图中不存在奇度定点,然后还要判断的就是连通分支数是否为1,即这个图是不是连通的,这 ...

  4. hdu 1878 无向图的欧拉回路

    原题链接 hdu1878 大致题意: 欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个无向图,问是否存在欧拉回路? 思路: 无向图存在欧拉回路的条件:1.图是连 ...

  5. HDU 1878 欧拉回路(无向图的欧拉回路)

    欧拉回路 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  6. HDU - 1878 欧拉回路 (连通图+度的判断)

    欧拉回路是指不令笔离开纸面,可画过图中每条边仅一次,且可以回到起点的一条回路.现给定一个图,问是否存在欧拉回路? Input 测试输入包含若干测试用例.每个测试用例的第1行给出两个正整数,分别是节点数 ...

  7. HDU 1878(1Y) (判断欧拉回路是否存在 奇点个数为0 + 一个联通分量 *【模板】)

    欧拉回路 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  8. hdu 1878 欧拉回路(联通<并查集> + 偶数点)

    欧拉回路Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  9. The Best Path HDU - 5883(欧拉回路 && 欧拉路径)

    The Best Path Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  10. hdu 1878

    http://acm.hdu.edu.cn/showproblem.php?pid=1878 题意:就是判断这个图是不是一个欧拉回路的一个题, 思路:我觉得这个题可以用并查集判环加上判断每个点的度就行 ...

随机推荐

  1. elementUI 易错点

    1.element table里面添加单选时,如果存在下拉框的筛选功能,那么每次下拉框筛选条件变化时 都得清空之前选中的信息,如果不数据更新后如果更新后的数据跟之前选中的相同 则会无法选中

  2. 【原创】apache虚拟主机配置

    1.取消httpd.conf中以下行的注释 Include conf/extra/httpd-vhosts.conf 2.增加虚拟主机的目录,代表该目录作为一个网站的虚拟目录,配置权限,允许访问: & ...

  3. HDU 1171 Big Event in HDU【01背包】

    题意:给出n个物品的价值和数目,将这一堆物品分给A,B,问怎样分使得两者的价值最接近,且A的要多于B 第一次做的时候,没有思路---@_@ 因为需要A,B两者最后的价值尽可能接近,那么就可以将背包的容 ...

  4. nginx的rewrite规则

    301跳转: server { listen 80; server_name www.xiaofan.com; return 301 https://$server_name$request_uri; ...

  5. OUTLOOK网站直接点击发送邮件

    下面的样式是用文字来做链接的:<a href="mailto:邮箱地址" alt="点击此链接给我写信">网页上显示的文字</a> 下面 ...

  6. 51nod 1321 收集点心(最小割)

    给出一种最小割的方法. 设\(num1[i]\),\(num2[i]\)为第i种形状的点心的两种口味的数量 设\(type[i]\),\(type[i]\)为第i种形状的点心的两种口味 假设\(num ...

  7. 关于JWT(Json Web Token)的思考及使用心得

    什么是JWT? JWT(Json Web Token)是一个开放的数据交换验证标准rfc7519(php 后端实现JWT认证方法一般用来做轻量级的API鉴权.由于许多API接口设计是遵循无状态的(比如 ...

  8. POJ——T1860 Currency Exchange

    http://poj.org/problem?id=1860 Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 29874   ...

  9. Building a Space Station POJ 2031 【最小生成树 prim】

    http://poj.org/problem?id=2031 Description You are a member of the space station engineering team, a ...

  10. MongoDB查询、索引和聚合

    初始化mongodb数据库 > use deng switched to db deng > db.createCollection("jingdong") #无參数 ...