CodeForces - 103B(思维+dfs找环)
题意
https://vjudge.net/problem/CodeForces-103B
很久很久以前的一天,一位美男子来到海边,海上狂风大作。美男子希望在海中找到美人鱼 ,但是很不幸他只找到了章鱼怪。
然而,在世界的另一端,人们正在积极的收集怪物的行为信息,以便研制出强大的武器来对付章鱼怪。 于地震的多发,以及恶劣的天气,使得我们的卫星不能很好的定位怪物,从而不能很好的命中目标。 第一次射击的分析结果会反映在一张由n个点和m条边组成的无向图上。现在让我们来确定这张图 是不是可以被认为是章鱼怪。
为了简单起见,我们假设章鱼怪的形状是这样,他有一个球形的身体,然后有很多触须连接在他的身上。可以表现为一张无向图,在图中可以被认为由三棵或者更多的树(代表触须)组成,这些树的根在图中处在一个环中(这个环代表球形身体)。
题目保证,在图中没有重复的边,也没有自环
思路
法1:
按题意用dfs找无向图的环,若找到一个环且整个图是连通的,那么yes。
法2:
设环上有k个点,那么那些树除了根节点一共有n-k个点,而x个点的树有x-1条边,现在去掉了他们的根节点,所以有n-k条边,再加上环上有k条边,n-k+k = m。
所以可以直接判断图是否连通而且n==m。
代码
法1:
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int n,m,in[N],vis[N],flag=0;
vector<int> g[N];
void dfs(int u,int fa)
{
in[u]=1;
for(int v:g[u])
{
if(!vis[v])
{
vis[v]=1;
dfs(v,u);
}
else if(v!=fa&&in[v])
{
// cout<<u<<" "<<v<<" gg"<<endl;
flag++;
}
}
in[u]=0;
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
int cnt=0;
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
vis[i]=1;
dfs(i,0);
cnt++;
}
}
// cout<<cnt<<" "<<flag<<endl;
if(cnt==1&&flag==1)
{
cout<<"FHTAGN!"<<endl;
}
else
cout<<"NO"<<endl;
return 0;
}
法2:
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
#define ll long long
const int N=200005;
const int mod=1e9+7;
const double eps=1e-8;
const double PI = acos(-1.0);
#define lowbit(x) (x&(-x))
int n,m,vis[N],flag=0;
vector<int> g[N];
void dfs(int u)
{
for(int v:g[u])
{
if(!vis[v])
{
vis[v]=1;
dfs(v);
}
}
}
int main()
{
std::ios::sync_with_stdio(false);
cin>>n>>m;
for(int i=1;i<=m;i++)
{
int u,v;
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
int cnt=0;
for(int i=1;i<=n;i++)
{
if(!vis[i])
{
vis[i]=1;
dfs(i);
cnt++;
}
}
if(cnt==1&&n==m)
{
cout<<"FHTAGN!"<<endl;
}
else
cout<<"NO"<<endl;
return 0;
}
#include<bits/stdc++.h>usingnamespacestd; #define inf 0x3f3f3f3f#define ll long longconstint N=200005; constint mod=1e9+7; constdouble eps=1e-8; constdouble PI = acos(-1.0); #define lowbit(x) (x&(-x))int n,m,in[N],vis[N],flag=0; vector<int> g[N]; void dfs(int u,int fa) { in[u]=1; for(int v:g[u]) { if(!vis[v]) { vis[v]=1; dfs(v,u); } elseif(v!=fa&&in[v]) { // cout<<u<<" "<<v<<" gg"<<endl; flag++; } } in[u]=0; } int main() { std::ios::sync_with_stdio(false); cin>>n>>m; for(int i=1;i<=m;i++) { int u,v; cin>>u>>v; g[u].push_back(v); g[v].push_back(u); } int cnt=0; for(int i=1;i<=n;i++) { if(!vis[i]) { vis[i]=1; dfs(i,0); cnt++; } } // cout<<cnt<<" "<<flag<<endl;if(cnt==1&&flag==1) { cout<<"FHTAGN!"<<endl; } elsecout<<"NO"<<endl; return0; }
CodeForces - 103B(思维+dfs找环)的更多相关文章
- # 「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程)
「银联初赛第一场」自学图论的码队弟弟(dfs找环+巧解n个二元一次方程) 题链 题意:n条边n个节点的连通图,边权为两个节点的权值之和,没有「自环」或「重边」,给出的图中有且只有一个包括奇数个结点的环 ...
- Codeforces Round #369 (Div. 2) D. Directed Roads —— DFS找环 + 快速幂
题目链接:http://codeforces.com/problemset/problem/711/D D. Directed Roads time limit per test 2 seconds ...
- CodeForces 711D Directed Roads (DFS找环+组合数)
<题目链接> 题目大意: 给定一个$n$条边,$n$个点的图,每个点只有一条出边(初始状态),现在能够任意对图上的边进行翻转,问你能够使得该有向图不出先环的方案数有多少种. 解题分析: 很 ...
- 与图论的邂逅06:dfs找环
当我在准备做基环树的题时,经常有了正解的思路确发现不会找环,,,,,,因为我实在太蒻了. 所以我准备梳理一下找环的方法: 有向图 先维护一个栈,把遍历到的节点一个个地入栈.当我们从一个节点x回溯时无非 ...
- HDU - 6370 Werewolf 2018 Multi-University Training Contest 6 (DFS找环)
求确定身份的人的个数. 只能确定狼的身份,因为只能找到谁说了谎.但一个人是否是民,无法确定. 将人视作点,指认关系视作边,有狼边和民边两种边. 确定狼的方法只有两种: 1. 在一个仅由一条狼边组成的环 ...
- Codeforces Round #383 (Div. 2) C. Arpa's loud Owf and Mehrdad's evil plan —— DFS找环
题目链接:http://codeforces.com/contest/742/problem/C C. Arpa's loud Owf and Mehrdad's evil plan time lim ...
- Codeforces Round #692 (Div. 2, based on Technocup 2021 Elimination Round 3) C. Peaceful Rooks (思维,dsu找环)
题意:一个棋盘上有一些"车",现在要让这些"车"跑到左倾斜的对角线上,每次可以移动一个棋子,但是棋盘的任意时刻都不能出现一个"车"能吃另一个 ...
- New Reform---cf659E(dfs找环)
题目链接:http://codeforces.com/problemset/problem/659/E 给你n个点,m条双向边,然后让你把这些边变成有向边,使得最后的图中入度为0的点的个数最少,求最少 ...
- UVaLive 6950 && Gym 100299K Digraphs (DFS找环或者是找最长链)
题意:有n个只包含两个字母的字符串, 要求构造一个m*m的字母矩阵, 使得矩阵的每行每列都不包含所给的字符串, m要尽量大, 如果大于20的话构造20*20的矩阵就行了. 析:开始吧,并没有读对题意, ...
随机推荐
- CentOS7环境下安装docker
操作系统 : CentOS7.5.1804_x64 docker版本: docker-ce-18.06.3 准备环境 1.如之前安装过移除老旧版本 yum remove docker docker-c ...
- CefSharp 无法输入中文的问题
在CefSharp75版本,使用了WpfImeKeyboardHandler支持后,无法支持搜狗中文输入法 其中的一个修复方案: 在ChrominumWebBrowser中,添加焦点事件的重写,对In ...
- 初步了解Node.js,学做简单的留言本案例
在还没有正式的学Node.js的时候, 你们认为Node.js 对于前端来说是什么呢? 会认为Node.js 是框架? 认为这是类似Jquery的一个快速.简洁的JavaScript框架? 反正我自己 ...
- ASP.NET MVC中使用MvcPager异步分页+在分页中复选框下一页上一页也保持选中
ASP.NET MVC 分页使用的是作者杨涛的MvcPager分页控件 地址:http://www.webdiyer.com/mvcpager/demos/ajaxpaging/ 这个分页控件在里面 ...
- English:Day-to-day 1014
Piracy Defy Coordination Essential Globe Silky Threat Supply Haste Ample Correspond Beloved Adjust D ...
- PHP $_SERVER超全局变量详解
参考资料:https://www.php.net/manual/zh/reserved.variables.server.php $_SERVER 是一个包含了诸如头信息(header).路径(pat ...
- SQL Server通过条件搜索获取相关的存储过程等对象
在SQL Server中,我们经常遇到一些需求,需要去搜索存储过程(Procedure).函数(Function)等对象是否包含某个对象或涉及某个对象,例如,我需要查找那些存储过程.函数是否调用了链接 ...
- s3c2440裸机-异常中断(一. 异常、中断的原理与流程)
1.异常中断概述 在arm架构的处理器中,cpu有7中工作模式,2中工作状态. 1.CPU模式(Mode): 7种Mode: 除了usr/sys,其他5种都是异常模式.我们知道中断属于异常的2中,中断 ...
- 【机器学习基础】交叉熵(cross entropy)损失函数是凸函数吗?
之所以会有这个问题,是因为在学习 logistic regression 时,<统计机器学习>一书说它的负对数似然函数是凸函数,而 logistic regression 的负对数似然函数 ...
- 32(1).层次聚类---AGNES
层次聚类hierarchical clustering 试图在不同层次上对数据集进行划分,从而形成树形的聚类结构. 一. AGNES AGglomerative NESting:AGNES是一种常用的 ...