CF 858F Wizard's Tour (DFS)
来源:互联网 发布:北亚数据恢复中心 编辑:程序博客网 时间:2024/05/23 18:32
Description
给定一个图,你想在这张图上进行若干次旅游,每次旅游可以任选一个点 x 作为起点,再走到一个与 x 直接有边相连的点 y,再走到一个与 y 直接有边相连的点 z 并结束本次旅游,不能经过任意一条边超过一次。求最多的旅游次数。
Solution
首先注意图不一定是连通的,对于每一个边的数量为
Code
#include<bits/stdc++.h>#define For(i , j , k) for (int i = (j) , _##end_ = (k) ; i <= _##end_ ; ++ i)#define Fordown(i , j , k) for (int i = (j) , _##end_ = (k) ; i >= _##end_ ; -- i)#define Set(a , b) memset(a , b , sizeof(a))#define pb push_back#define INF (0x3f3f3f3f)#define Mod (1000000007)using namespace std;typedef long long LL;template <typename T> inline bool chkmax(T &a , T b) { return a < b ? (a = b , 1) : 0; }template <typename T> inline bool chkmin(T &a , T b) { return b < a ? (a = b , 1) : 0; }int _ , __;char c_;inline int read(){ for (_ = 0 , __ = 1 , c_ = getchar() ; !isdigit(c_) ; c_ = getchar()) if (c_ == '-') __ = -1; for ( ; isdigit(c_) ; c_ = getchar()) _ = (_ << 1) + (_ << 3) + (c_ ^ 48); return _ * __;}inline void File(){#ifdef hany01//#ifndef ONLINE_JUDGE freopen("graph.in" , "r" , stdin); freopen("graph.out" , "w" , stdout);#endif}const int maxn = 200010 , maxm = 200010;int n , m , v[maxm * 2] , nex[maxm * 2] , beg[maxn] , uu[maxm] , vv[maxm] , Ans , Summ , fa[maxn] , e , d[maxn];bool vis[maxn];vector<int> ls[maxn];inline void add(int uu , int vv){ v[++ e] = vv; nex[e] = beg[uu]; beg[uu] = e;}inline void Init(){ n = read(); m = read(); For(i , 1 , m) uu[i] = read(), vv[i] = read(), add(uu[i] , vv[i]), add(vv[i] , uu[i]);}void dfs1(int u){ vis[u] = 1; for (int i = beg[u] ; i ; i = nex[i]) { ++ Summ; if (!vis[v[i]]) { dfs1(v[i]); fa[v[i]] = u; } }}void dfs2(int u){ for (int i = beg[u] ; i ; i = nex[i]) if (fa[v[i]] == u) { dfs2(v[i]); if (d[v[i]]) { d[v[i]] = 0; ls[v[i]].pb(u); } else { d[u] ^= 1; ls[u].pb(v[i]); } }}inline void Solve(){ Ans = 0; For(i , 1 , n) if (!vis[i]) { Summ = 0; dfs1(i); Ans += Summ / 4; } For(i , 1 , m) if (fa[uu[i]] != vv[i] && fa[vv[i]] != uu[i]) { ls[uu[i]].pb(vv[i]); d[uu[i]] ^= 1; } For(i , 1 , n) if (!fa[i]) dfs2(i);}inline void Print(){ printf("%d\n" , Ans); For(u , 1 , n) for (int i = 0 ; i + 1 < (int)ls[u].size() ; i += 2) printf("%d %d %d\n" , ls[u][i] , u , ls[u][i + 1]);}int main(){ File(); Init(); Solve(); Print(); return 0;}
阅读全文
1 0
- CF 858F Wizard's Tour (DFS)
- codeforces 858F Wizard's Tour
- Codeforces 858F ( Codeforces Round #434 Div. 2 F ) Wizard's Tour 图论dfs
- CodeforceF. Wizard's Tour
- 【Codeforces858F】Wizard's Tour
- [杂题]Codeforces 860D. Wizard's Tour
- Cf 120 F 【vector+dfs】
- 【CF 732F】 Tourist Reform(割边+dfs)
- Codeforces Round #279 (Div. 2) F. Treeland Tour(lis+dfs)
- USACO 6.5.3 Betsy's Tour dfs
- cf 858F
- codeforces 490F Treeland Tour(dp)
- CF #286 div 2 B. Mr. Kitayuta's Colorful Graph(dfs)
- cf 337 D(dfs)
- codeforces 858F&&JZOJ5404graph dfs
- cf round340 div2 F(莫队)
- cf#286-B - Mr. Kitayuta's Colorful Graph-dfs
- dp专辑F - Mondriaan's Dream [dp+dfs]
- 智能指针学习笔记
- 专家:利用生物钟或治愈癌症 使治疗事半功倍
- mysql数据库用户权限详情
- cap,pcap文件中的ipv4数据包转成ipv6数据包
- mysql常见错误及分析及解决办法
- CF 858F Wizard's Tour (DFS)
- 大家好,给大家介绍一下,这是我老婆
- Spring boot,Spring cloud,Dubbo,Elasticsearch,Redis,ActiveMQ最新技术提升
- deep learning(coursera) week1 Introduction to deep learning
- 专家:利用生物钟或治愈癌症 使治疗事半功倍
- 使用layer.open时content属性传值记录
- HashSet、TreeSet和LinkedHashSet的区别
- Java练习题9
- Face recognition-Loss Functions