Codeforces 题目传送门 & 洛谷题目传送门

一道思维题。

题目没有说无解输出 \(-1\),这意味着对于任意 \(G\) 一定存在一个合法的排列方案。因此可以考虑采用归纳法。对于一个点的情况显然成立,重点在于如何从 \(n-1\) 个点推到 \(n\) 个点。

然后就是我所想不到的地方了。考虑与第 \(n\) 个点相邻的点集 \(S\),我们先在第 \(n\) 个点与 \(S\) 相连的边上都放上一枚硬币,这样不过这样可能会不合法,因此我们需要调整。注意,由于是归纳,因此我们需要在不改变 \(1\sim n-1\) 号点的权值的情况下尝试调整 \(n\) 的权值,否则就会导致 \(1\sim n-1\) 不合法,也就是归纳前提不成立了。

进一步分析这个模型,注意到对于一个点 \(x\in T\) 有两种方法在不改变 \(x\) 的权值的前提下改变 \(n\) 的权值:

  1. 在 \(x\) 与 \(n\) 的边上拿走一个硬币,在 \(x\) 上放上一个硬币。
  2. 在 \(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(归纳+构造)的更多相关文章

  1. 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 ...

  2. Codeforces 707C Pythagorean Triples(构造三条边都为整数的直角三角形)

    题目链接:http://codeforces.com/contest/707/problem/C 题目大意:给你一条边,问你能否构造一个包含这条边的直角三角形且该直角三角形三条边都为整数,能则输出另外 ...

  3. Codeforces 1246D/1225F Tree Factory (构造)

    题目链接 https://codeforces.com/contest/1246/problem/D 题解 首先考虑答案的下界是\(n-1-dep\) (\(dep\)为树的深度,即任何点到根的最大边 ...

  4. Codeforces - 1202D - Print a 1337-string... - 构造

    https://codeforces.com/contest/1202/problem/D 当时想的构造是中间两个3,然后前后的1和7组合出n,问题就是n假如是有一个比较大的质数因子或者它本身就是质数 ...

  5. Codeforces 743C - Vladik and fractions (构造)

    Codeforces Round #384 (Div. 2) 题目链接:Vladik and fractions Vladik and Chloe decided to determine who o ...

  6. Codeforces 1368E - Ski Accidents(构造+思维)

    Codeforces 题面传送门 & 洛谷题面传送门 神仙构造题(不过可能我构造太烂了?) 首先考虑这个奇奇怪怪的 \(\dfrac{4}{7}\),以及这个每个点出度最多为 \(2\) 的条 ...

  7. Codeforces 1270E - Divide Points(构造+奇偶性)

    Codeforces 题目传送门 & 洛谷题目传送门 显然,直接暴力枚举是不可能的. 考虑将点按横纵坐标奇偶性分组,记 \(S_{i,j}=\{t|x_t\equiv i\pmod{2},y_ ...

  8. codeforces 622C. Optimal Number Permutation 构造

    题目链接 假设始终可以找到一种状态使得值为0, 那么两个1之间需要隔n-2个数, 两个2之间需要隔n-3个数, 两个3之间隔n-4个数. 我们发现两个三可以放到两个1之间, 同理两个5放到两个3之间. ...

  9. Codeforces 1019C Sergey's problem 构造

    原文链接https://www.cnblogs.com/zhouzhendong/p/CF1019C.html 题目传送门 - CF1019C 题意 给定一个有 $n$ 个节点 . $m$ 条边的有向 ...

随机推荐

  1. 初学python-day4 字典(已更新完)

  2. SharkCTF2021 BabyGame

    web类题. 访问题给页面,页面里没啥信息.抓包,发现: 访问它,发现是一个游戏. F12之后看调试器里的js代码,发现: console.log("balabalabala"); ...

  3. java定时任务调度框架

    java定时任务目前主要有三种: Java自带的java.util.Timer类,这个类允许你调度一个java.util.TimerTask任务.使用这种方式可以让你的程序按照某一个频度执行,但不能在 ...

  4. 【UE4 设计模式】享元模式 Flyweight Pattern

    概述 描述 运用共享技术有效地支持大量细粒度对象的复用.系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用. 由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻 ...

  5. '\r'(回车符),'\n'(换行符)与"\r\n"

    一.'\n','\r'和"\r\n" 回车\r本义是光标重新回到本行开头,r的英文return,控制字符可以写成CR,即Carriage Return(回车,carriage有&q ...

  6. 正则表达式: NFA引擎匹配原理

    NFA引擎匹配原理 1       为什么要了解引擎匹配原理 一个个音符杂乱无章的组合在一起,弹奏出的或许就是噪音,同样的音符经过作曲家的手,就可以谱出非常动听的乐曲,一个演奏者同样可以照着乐谱奏出动 ...

  7. 热身 for computer industry

    项目 内容 作业属于 班级博客 作业要求 作业要求 个人课程目标 掌握软件工程基础知识 具体有助方面 个人认知与规划 其他参考文献 博客Ⅰ 博客 Ⅱ 选择计算机 你为什么选择计算机专业?你认为你的条件 ...

  8. 2021.8.3考试总结[NOIP模拟29]

    T1 最长不下降子序列 数据范围$1e18$很不妙,但模数$d$只有$150$,考虑从这里突破. 计算的式子是个二次函数,结果只与上一个值有关,而模$d$情况下值最多只有$150$个,就证明序列会出现 ...

  9. linux 内核源代码情景分析——地址映射的全过程

    linux 内核采用页式存储管理.虚拟地址空间划分成固定大小的"页面",由MMU在运行时将虚拟地址映射成某个物理内存页面中的地址.页式内存管理比段式内存管理有很多好处,但是由于In ...

  10. #web开发# 知道cookie hostonly属性的请举手。

    Cookie常见姿势.疑难梳理 目前w3c定义浏览器存放每个cookie需要包含以下字段: cookie属性 基本描述 举例 备注 name=value cookie键值对 id=a3fWa expi ...