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$ 条边的有向 ...
随机推荐
- 【Java虚拟机8】自定义类加载器、类加载器命名空间、类的卸载
前言 学习类加载器就一定要自己实现一个类加载器,今天就从一个简单的自定义类加载器说起. 自定义类加载器 例1 一个简单的类加载器,从一个给定的二进制名字读取一个字节码文件的内容,然后生成对应的clas ...
- 【UE4】类的继承层级关系
- 【数据结构与算法Python版学习笔记】基本数据结构——列表 List,链表实现
无序表链表 定义 一种数据项按照相对位置存放的数据集 抽象数据类型无序列表 UnorderedList 方法 list() 创建一个新的空列表.它不需要参数,而返回一个空列表. add(item) 将 ...
- 剑指offer:JZ9 用两个栈实现队列
JZ9 用两个栈实现队列 描述 用两个栈来实现一个队列,使用n个元素来完成 n 次在队列尾部插入整数(push)和n次在队列头部删除整数(pop)的功能. 队列中的元素为int类型.保证操作合法,即保 ...
- JVM:内存结构
JVM:内存结构 说明:这是看了 bilibili 上 黑马程序员 的课程 JVM完整教程 后做的笔记 内容 程序计数器 虚拟机栈 本地方法栈 堆 方法区 直接内存 1. 程序计数器 1.1 定义 P ...
- python的random模块生成随机数
python的random函数 random.random() 生成0-1之间的随机数 random.uniform(a,b)生成a,b之间的浮点数 random.randint(a,b)生成a,b之 ...
- 零基础入门非常好的C语言基础资料
C语言程序的结构认识 用一个简单的c程序例子,介绍c语言的基本构成.格式.以及良好的书写风格,使小伙伴对c语言有个初步认识. 例1:计算两个整数之和的c程序: #include main() { in ...
- UVM:6.2.3 sequencer 的grab 操作
转载:UVM:6.2.3 sequencer 的grab 操作_tingtang13的博客-CSDN博客 1.grab 比lock 优先级更高. 2.lock 是插到sequencer 仲裁队列的后面 ...
- hdu 5178 pairs(BC第一题,,方法不止一种,,我用lower_bound那种。。。)
题意: X坐标上有n个数.JOHN想知道有多少对数满足:x[a]-x[b]<=k(题意给)[a<b] 思路: 额,,,直接看代码吧,,,, 代码: int T,n,k; int x[100 ...
- [源码解析] PyTorch 分布式(1)------历史和概述
[源码解析] PyTorch 分布式(1)------历史和概述 目录 [源码解析] PyTorch 分布式(1)------历史和概述 0x00 摘要 0x01 PyTorch分布式的历史 1.1 ...