Codeforces 1423N - BubbleSquare Tokens(归纳+构造)
一道思维题。
题目没有说无解输出 \(-1\),这意味着对于任意 \(G\) 一定存在一个合法的排列方案。因此可以考虑采用归纳法。对于一个点的情况显然成立,重点在于如何从 \(n-1\) 个点推到 \(n\) 个点。
然后就是我所想不到的地方了。考虑与第 \(n\) 个点相邻的点集 \(S\),我们先在第 \(n\) 个点与 \(S\) 相连的边上都放上一枚硬币,这样不过这样可能会不合法,因此我们需要调整。注意,由于是归纳,因此我们需要在不改变 \(1\sim n-1\) 号点的权值的情况下尝试调整 \(n\) 的权值,否则就会导致 \(1\sim n-1\) 不合法,也就是归纳前提不成立了。
进一步分析这个模型,注意到对于一个点 \(x\in T\) 有两种方法在不改变 \(x\) 的权值的前提下改变 \(n\) 的权值:
- 在 \(x\) 与 \(n\) 的边上拿走一个硬币,在 \(x\) 上放上一个硬币。
- 在 \(x\) 与 \(n\) 的边上放上一个硬币,在 \(x\) 上拿走一个硬币。
我们考虑这样的算法,对于所有 \(x\in S\) 且 \(x\) 上面没有硬币,我们对 \(x\) 进行一遍操作 \(1\),这样可以确保所有 \(S\) 中的硬币都可以进行操作 \(2\)。然后设现在 \(n\) 的权值为 \(v\),那么我们显然可以通过 \(2\) 操作将 \(n\) 的权值变为 \([v,v+|S|]\) 中的任意一个数。我们希望 \(n\) 的权值与 \(S\) 中点的权值都不同,而 \(S\) 中的点最多只有 \(|S|\) 个权值,因此总能变成一个不在 \(|S|\) 中的权值,得证。
代码异常好写:
u1s1 这种思维题就是题解写起来容易,想起来死活想不到……
const int MAXN=1.25e4;
const int MAXM=1e6;
int n,m,u[MAXM+5],v[MAXM+5],val[MAXN+5],w[MAXM+5],is[MAXN+5];
vector<pii> g[MAXN+5];
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;w[i]=1,i++){
scanf("%d%d",&u[i],&v[i]);
g[u[i]].pb(mp(v[i],i));
g[v[i]].pb(mp(u[i],i));
val[u[i]]++;val[v[i]]++;
}
for(int i=1;i<=n;i++){
queue<pii> q;set<int> st;
for(pii p:g[i]){
if(p.fi>i) continue;
if(!is[p.fi]) w[p.se]--,is[p.fi]++,val[i]--;
q.push(p);st.insert(val[p.fi]);
}
while(st.find(val[i])!=st.end()){
pii p=q.front();q.pop();
w[p.se]++;is[p.fi]--;val[i]++;
}
} vector<int> resv;
for(int i=1;i<=n;i++) if(is[i]) resv.pb(i);printf("%u\n",resv.size());
for(int i=0;i<resv.size();i++) printf("%d%c",resv[i]," \n"[i+1==resv.size()]);
for(int i=1;i<=m;i++) printf("%d %d %d\n",u[i],v[i],w[i]);
return 0;
}
Codeforces 1423N - BubbleSquare Tokens(归纳+构造)的更多相关文章
- Educational Codeforces Round 10 B. z-sort 构造
B. z-sort 题目连接: http://www.codeforces.com/contest/652/problem/B Description A student of z-school fo ...
- Codeforces 707C Pythagorean Triples(构造三条边都为整数的直角三角形)
题目链接:http://codeforces.com/contest/707/problem/C 题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外 ...
- Codeforces 1246D/1225F Tree Factory (构造)
题目链接 https://codeforces.com/contest/1246/problem/D 题解 首先考虑答案的下界是\(n-1-dep\) (\(dep\)为树的深度,即任何点到根的最大边 ...
- Codeforces - 1202D - Print a 1337-string... - 构造
https://codeforces.com/contest/1202/problem/D 当时想的构造是中间两个3,然后前后的1和7组合出n,问题就是n假如是有一个比较大的质数因子或者它本身就是质数 ...
- Codeforces 743C - Vladik and fractions (构造)
Codeforces Round #384 (Div. 2) 题目链接:Vladik and fractions Vladik and Chloe decided to determine who o ...
- Codeforces 1368E - Ski Accidents(构造+思维)
Codeforces 题面传送门 & 洛谷题面传送门 神仙构造题(不过可能我构造太烂了?) 首先考虑这个奇奇怪怪的 \(\dfrac{4}{7}\),以及这个每个点出度最多为 \(2\) 的条 ...
- Codeforces 1270E - Divide Points(构造+奇偶性)
Codeforces 题目传送门 & 洛谷题目传送门 显然,直接暴力枚举是不可能的. 考虑将点按横纵坐标奇偶性分组,记 \(S_{i,j}=\{t|x_t\equiv i\pmod{2},y_ ...
- codeforces 622C. Optimal Number Permutation 构造
题目链接 假设始终可以找到一种状态使得值为0, 那么两个1之间需要隔n-2个数, 两个2之间需要隔n-3个数, 两个3之间隔n-4个数. 我们发现两个三可以放到两个1之间, 同理两个5放到两个3之间. ...
- Codeforces 1019C Sergey's problem 构造
原文链接https://www.cnblogs.com/zhouzhendong/p/CF1019C.html 题目传送门 - CF1019C 题意 给定一个有 $n$ 个节点 . $m$ 条边的有向 ...
随机推荐
- Object.create 和 Object.assign
Object.assign(target, ...source) 1.Object.assign方法只会拷贝源对象自身(不包括原型)的并且可枚举的属性到目标对象,使用源对象的get和目标对象的set, ...
- Sobol 序列并行化的实践经验
目录 Sobol 序列并行化的实践经验 随机数发生器并行化的常见策略 Sobol 序列的原理和跳转功能 Sobol 序列并行化实践 分块策略 蛙跳策略 蛙跳策略的计算量分析 减少异或计算的技巧 分块策 ...
- 微信小程序 scroll-view 完成上拉加载更多
我们经常在软件客户端上看到这么一个功能,当我们阅读信息浏览到文章的末尾时,通常会加载出更多的信息.比如,我们在简书客户端上浏览推荐文章时,浏览到屏幕的末尾,此时又加载出了另一页的推荐文章,即实现了上拉 ...
- CSP-S2021 退役记
首先大家一起恭喜博主以5pts之差与省三擦肩而过!(nmd爷去年都省三今年成功打铁了) 果然这个菜鸡一年不如一年了 upd:T3死在多测上了,随便一个40+28的人可以吊打我 Day -2: 模拟赛, ...
- Python | 实现pdf文件分页
不知道大家有没有遇到过这么一种情况,就比如一个pdf格式的电子书,我们经常浏览的是其中的一部分,而这电子书的页数很大,每当需要浏览时,就需要翻到对应的页码,就有点儿繁琐. 还有一些情况,比如,我们想分 ...
- 攻防世界Web之fakebook
打开题目,得到一个网页,包含一个表格.两个按钮. 习惯性先查看网页源码,但没发现有效信息. <!doctype html> <html lang="ko"> ...
- selenium2.x 与 selenium3.x 最大区别
一.selenium2.x 与 selenium3.x 最大区别 (1) 从3.0版本selenium开始使用火狐浏览器完成web自动化就需要用到驱动包了. (2) 而2.0版本的selenium使用 ...
- springboot使用之请求参数与基本注解
@PathVariable 作用:@PathVariable是spring3.0的一个新功能:接收请求路径中占位符的值,将URL中占位符参数{xxx}绑定到处理器类的方法形参中@PathVariabl ...
- uni-城市列表滑动组件,点击字母跳转到指定位置
本插件由博主自主开发,比uni插件市场的城市列表滑动组件性能好,且不会出现闪屏的情况. 通过计算城市列表的高度实现滚动到指定位置,使用了uni滚动到指定位置的api city-chooce为页面入口页 ...
- Java学习(十一)
今天学习了this和static关键字,这两个都是c++中学过的,但讲师还是讲了2个小时... 学得东西大部分都知道吧. this是当前对象的地址,类中带有static的方法不能使用this. 类中带 ...