Codeforces Round #819 C - D
C
题意
给定一个合法的括号序列,如果区间【l, r】之间是一个合法序列,那么就在l, r之间连一条边 问最后有几个连通块
思路
相邻的两个括号并不会使答案+2,只有嵌套的括号才能使答案增加,而嵌套的括号结尾必然是’))'我们只需要维护‘)’的连续出现次数,如果大于1则增加答案
代码实现
void solve()
{int n;cin >> n;string s;cin >> s;int res = 0;int cnt = 0;for (int i = 0 ; i < s.size(); i ++){if (s[i] == '('){if(cnt)res += cnt - 1;cnt = 0;}else cnt ++;}cout << res + cnt << endl;
}
D
题意
给定n个点,m条边 m<= n + 2且给定的图联通无重边 选择一些边为red , 一些边为blue
请问边选定后,能使两个图的得到最小连通块的方案是什么,(打印任意)
思路
根据最小生成树kruskal的推论,一条边可以减少一个连通块,那么我们最好的操作就是求一个最小生成树,那么还有一个小问题,就是剩下的三条边可能是个环,这样答案不是最佳。解决方案是判断剩下的三条边如果是环,我们任意将环上一边变成另一种颜色,在将这边上的某一点的所有边的零一点全变色, 这样能构造出一个没有环的图
代码实现
#include<bits/stdc++.h>
#define x first
#define y second
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int, int> PII;
typedef long long LL;
const int N = 2e5 + 10, mod = 1e9 + 7, INF = 1e9;
PII seg[N];
int p[N];
char ans[N];
int find (int x)
{if (p[x] != x) p[x] = find (p[x]);return p[x];
}
void solve()
{int n, m;cin >> n >> m;for (int i = 1 ; i <= m ; i ++){int l, r;cin >> l >> r;seg[i] = {l, r};}vector<int> red;vector<vector<pair<int, int>>> g (n + 2);for (int i = 1 ; i <= n ; i ++) p[i] = i;for (int i = 1 ; i <= m ; i ++){int l = seg[i].x, r = seg[i].y;if (find (l) != find (r)){ans[i] = '1';p[find(l)] = find (r);g[l].push_back ({r, i});g[r].push_back ({l, i});}else ans[i] = '0', red.push_back (i);}if (m == n + 2){set<int> S;for (auto x : red)S.insert (seg[x].first), S.insert (seg[x].second);if (S.size() == 3){ans[red[0]] = '1';int p = seg[red[0]].x;for (auto [u, id] : g[p]) ans[id] = '0';}}for (int i = 1 ; i <= m ; i ++)cout << ans[i];cout << endl;
}
signed main()
{// freopen("data.in","r",stdin);// freopen("cfcode.out","w",stdout);std::ios::sync_with_stdio (false);std::cin.tie (nullptr);int t = 1;cin >> t;while (t--)solve();return 0;
}```
Codeforces Round #819 C - D相关推荐
- Codeforces Round #819 (Div. 1 + Div. 2) D题解
题目链接 思路 观察数据可以发现m <-= n + 2, 若想使两种颜色的联通块总和最小,可以想到一颗生成树与剩下几天边分开. 当剩下0.1.2条边时无特殊条件,而当剩省下3条边时,需要考虑练成 ...
- Codeforces Round #506 (Div. 3)
Codeforces Round #506 (Div. 3) 实习期间事不多,对div3 面向题解和数据编程了一波 A. Many Equal Substrings 题目链接 A题就是找后缀和前缀重合 ...
- Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈)
Codeforces Round #417:E. FountainsSagheer and Apple Tree(树上博弈) 标签: codeforces 2017-06-02 11:41 29人阅读 ...
- Codeforces Round #563 (Div. 2)/CF1174
Codeforces Round #563 (Div. 2)/CF1174 CF1174A Ehab Fails to Be Thanos 其实就是要\(\sum\limits_{i=1}^n a_i ...
- Codeforces Round #270
Codeforces Round #270 题目链接 A:我是筛了下素数.事实上偶数仅仅要输出4和x - 4,奇数输出9和x - 9就可以 B:贪心的策略,把时间排序后.取每k个的位置 C:贪心.每次 ...
- 构造 Codeforces Round #302 (Div. 2) B Sea and Islands
题目传送门 1 /* 2 题意:在n^n的海洋里是否有k块陆地 3 构造算法:按奇偶性来判断,k小于等于所有点数的一半,交叉输出L/S 4 输出完k个L后,之后全部输出S:) 5 5 10 的例子可以 ...
- [Educational Codeforces Round 16]A. King Moves
[Educational Codeforces Round 16]A. King Moves 试题描述 The only king stands on the standard chess board ...
- Educational Codeforces Round 114 (Rated for Div. 2) (A ~ F)全题解
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Educational Codeforces Round 114 (Rated for Div. 2) ...
- Educational Codeforces Round 106 (Rated for Div. 2)(A ~ E)题解(每日训练 Day.16 )
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 Educational Codeforces Round 106 (Rated for Div. ...
最新文章
- 网卡绑定技术linux c,Linux多网卡绑定
- ios 日期时间打印
- Groovy 1.5.7 出现java.lang.LinkageError问题
- Linux网络编程——黑马程序员笔记
- 兄dei,Python数据竞赛和5万现金奖励了解一下
- require_once的用法
- --save 和--save-dev的区别
- 数组排序(冒泡、排序)
- ddos应急处理_写给十九大安保应急的兄弟们 来看看DDOS攻击应急预案
- d630 无线驱动 linux,fedora 8下DELL D630无线网卡驱动的安装
- python中event_Python Event实现线程通信
- SAP License:COPA凭证冲销
- php如何进行界面切换,PHP 页面跳转到另一个页面的多种方法方法总结
- 快速删除node_modules文件夹!!!
- Jupyter notebook 转 pdf [完整转换]
- 2016最新淘宝客申请高佣金以及分析抓包详情
- IT行业的6大热门岗位,薪酬都有多高?
- Android APK文件反编译 查看appid等信息
- Java文字转语音功能实现
- 彻底搞懂AQS-重点方法精讲 [并发劝退- 哭唧唧]
热门文章
- 学习笔记(01):巫妖王51单片机开发板配套视频课程-LED闪烁和流水灯效果
- Linux安装Skype
- ps插件DR5扩展面板dr4.5升级版磨皮调色工笔画集合
- 新基建形势下安全公共服务平台建设机遇
- pda扫描mysql,获取pda扫码枪 扫描的数据
- 计算机组装前的主意事项有,组装电脑前的准备与注意事项
- 电源管理芯片的更新换代和各种应战
- android studio播放视频权限,Android Studio实现本地视频播放
- “文贼“当道引公愤 抄袭经济能持续多久?
- ubuntu 麦克风录音_如何在Ubuntu中禁用麦克风和网络摄像机 | MOS86