【Codeforces542E】Playing on Graph [Bfs][Dfs]
Playing on Graph
Time Limit: 20 Sec Memory Limit: 512 MB
Description

Input

Output

Sample Input
1 2
2 3
3 4
3 5
Sample Output
HINT
Solution
我们先考虑无解的情况。显然就是图中有奇环的时候无解,因为你将奇环上两点缩起来,最后必定会变成一个三元环,而三元环是不能合并的。所以就可以Dfs黑白染色一下,若是搜到两个同色的话即是有奇环。
我们再考虑如何构造一种方案,显然,我们先找出一个点root,然后将所有 dist 相同的并起来,这样是一组可行解。可以发现,所有的方案都可以由这种方式构造出来。
那么这时候,确定一点 为 root 的时候,贡献显然等于最大的 dist。那么我们将所有点都确定为root一遍,然后Bfs求一下dist,取出最大dist,就可以得到一个联通块的答案了。
显然可以有多个连通块,Ans = Σ每个连通块的答案。
Code
#include<iostream>
#include<string>
#include<algorithm>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<queue>
using namespace std;
typedef long long s64; const int ONE = ;
const int Base = ; int n, m;
int x, y;
int next[ONE], first[ONE], go[ONE], tot;
int vis[ONE], col[ONE];
int pd;
int vis_a[ONE], record[ONE], num, dist[ONE];
int Ans;
queue <int> q; int get()
{
int res;char c;
while( (c=getchar())< || c> );
res=c-;
while( (c=getchar())>= && c<= )
res=res*+c-;
return res;
} void Add(int u, int v)
{
next[++tot] = first[u], first[u] = tot, go[tot] = v;
next[++tot] = first[v], first[v] = tot, go[tot] = u;
} void Dfs(int u, int color)
{
vis[u] = ;
col[u] = color;
record[++num] = u;
for(int e = first[u]; e; e = next[e])
{
int v = go[e];
if(!vis[v]) Dfs(v, color ^ );
else pd |= col[v] == col[u];
}
} int Bfs(int S)
{
for(int i = ; i <= n; i++) dist[i] = vis_a[i] = ;
dist[S] = , vis_a[S] = , q.push(S);
while(!q.empty())
{
int u = q.front(); q.pop();
for(int e = first[u]; e; e = next[e])
{
int v = go[e];
if(vis_a[v]) continue;
vis_a[v] = ;
dist[v] = dist[u] + ;
q.push(v);
}
} int res = ;
for(int i = ; i <= n; i++)
res = max(res, dist[i]);
return res;
} int main()
{
n = get(); m = get();
for(int i = ; i <= m; i++)
{
x = get(), y = get();
Add(x, y);
} for(int i = ; i <= n; i++)
if(!vis[i])
{
num = ;
Dfs(i, );
if(pd == ) {printf("-1"); return ;} int res = ;
for(int j = ; j <= num; j++)
res = max(res, Bfs(record[j]));
Ans += res;
} printf("%d", Ans);
}
un[ʌn]
- n. (Un)人名;(柬)温
- pron. 家伙,东西
【Codeforces542E】Playing on Graph [Bfs][Dfs]的更多相关文章
- 【LeetCode】785. Is Graph Bipartite? 解题报告(Python)
[LeetCode]785. Is Graph Bipartite? 解题报告(Python) 作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu. ...
- 【ToolGood.Words】之【StringSearch】字符串搜索——基于BFS算法
字符串搜索中,BFS算法很巧妙,个人认为BFS算法效率是最高的. [StringSearch]就是根据BFS算法并优化. 使用方法: string s = "中国|国人|zg人|fuck|a ...
- 【CF718E】Matvey's Birthday BFS+动态规划
[CF718E]Matvey's Birthday 题意:给你一个长度为n的,由前8个小写字母组成的字符串s.构建一张n个点的无向图:点i和点j之间有一条长度为1的边当且仅当:|i-j|=1或$s_i ...
- 【BZOJ1054】[HAOI2008]移动玩具 BFS
[BZOJ1054][HAOI2008]移动玩具 Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个 ...
- 【BZOJ3551】[ONTAK2010]Peaks加强版 最小生成树+DFS序+主席树
[BZOJ3545][ONTAK2010]Peaks Description 在Bytemountains有N座山峰,每座山峰有他的高度h_i.有些山峰之间有双向道路相连,共M条路径,每条路径有一个困 ...
- 【BZOJ2938】[Poi2000]病毒 AC自动机+DFS
[BZOJ2938][Poi2000]病毒 Description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码 ...
- 【BZOJ2801】[Poi2012]Minimalist Security BFS
[BZOJ2801][Poi2012]Minimalist Security Description 给出一个N个顶点.M条边的无向图,边(u,v)有权值w(u,v),顶点i也有权值p(i),并且对于 ...
- 【BZOJ2905】背单词 fail树+DFS序+线段树
[BZOJ2905]背单词 Description 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使得其中的每个单词是后一个单词的子串,最大化子序列中W的和. Input 第一行 ...
- 【lightoj-1039】A Toy Company(BFS)
The toy company "Babies Toys" has hired you to help develop educational toys. The current ...
随机推荐
- c++ 反射类型
来自: 实现代码=== // // Created by lizhen on 2017/9/29. // #ifndef BOOST_ALL_CALLBACKFUNCTION_H #define BO ...
- JDK源码分析 – LinkedList
LinkedList类的申明 public class LinkedList<E> extends AbstractSequentialList<E> implements L ...
- c++:error2019,无法解析的外部命令blabla~
出现这个原因的问题汇总: 1,相应的附加库没有包含进去,注意附加库的目录是 / 2,函数没有与之对应的类,却在main中以某一类的对象调用了该方法. 其实,当错误中显示fun()成为无法解析的外部命令 ...
- get computer system mac info in javascript
get computer system mac info in javascript Q: how to using js get computer system mac information? A ...
- Prepare方法和UnPrepare方法
Query组件提供的Prepare方法的作用是通知BDE或数据库服务器优化并准备执行SQL操作.Query的Prepare方法能优化执行的原因在于该方法是是在SQL语句执行前就对其进行分析.检查和编译 ...
- Springboot @Transactional 事务不回滚
一.异常捕获的原因 这里Exception异常,他又分为运行时异常RuntimeException和非运行时异常 可查的异常(checked exceptions):Exception下除了Runti ...
- [洛谷P5057][CQOI2006]简单题
题目大意:有一个长度为$n$的$01$串,两个操作: $1\;l\;r:$把区间$[l,r]$翻转($0->1,1->0$) $2\;p:$求第$p$位是什么 题解:维护前缀异或和,树状数 ...
- Vue项目搭建过程
环境搭建:mac+nodejs+npm #安装node.js : $ brew install node #安装vue-cil: $ npm install -g vue-cli 注:官网下载安装no ...
- NOIP系列
NOIP2015运输计划 唉 真是 这题 卡死我了 tarjan离线lca复杂度O(n) 最后各种卡常,多交几遍才A(洛谷104ms) %%%zk学长609ms 注意二分的时候左边界要定成0 根据题意 ...
- 【优先队列】【UVa11997】K Smallest Sums
传送门 Description Input Output Translation · 给定k个长度为k的数组,把每个数组选一个元素加起来,这样共有kk种可能的答案,求最小的k个 Sample Inpu ...