CF Graphs
CF746G New Roads
构造题。
显然优先满足强制叶子节点的限制,设第
此时还需钦定
时间复杂度
Code
CF59E Shortest Path
有限制的最短路。
给定有序三元组
看到
Code
CF909E Coprocessor
DAG刷表题。
对于每条由副机到主机的线路
对于每条其他线路,
答案为副机dis最大值:
Code
CF467D Fedor and Essay
恶心Tarjan缩点+DAG+字符串预处理———杂糅题
首先将每一个小写相同的字符串视为一个点,记字符
Code
CF242D Dispute
贪心题,套图论的羊皮。
将有效点击分为主动和被动,注意到同时主动点击和先后主动点击但单点只点一次等价。
记
优先队列维护当前
正确性:注意到优先保证
Code
CF229C Triangles
计数+思维题。定义“三角形”为图上长度为
整难则反,原图“三角形”数:
考虑稍稍转化题意:完全图
设
Code
CF912D Fishes
期望最大化题。BFS属于是凑数。
考虑每个单元格对全局期望的贡献,选择前
给出式子:
总渔网可能方案数:
格子
Code
CF875C National Property
2-SAT。
考虑相邻串
Code
CF666B World Tour
Meet in the Middle+最短路。
枚举中间节点
本题与笔者第一道CCF赛时真题CSP-S2022 T1 假期计划非常相似———图论结构,利用Meet in the Middle降低时间复杂度,枚举较优解;唯一区别在于对边权或点权处理。
Code
CF840B Leha and another game about graph
奇偶特殊性题,连通图。
笔者第一次思考时,考虑将奇偶点尽可能化为无限制点,苦于1.贪心策略无法证明,2.全为奇偶点无法处理。
设白为
首先考虑连边对点的度数改变情况:翻转两点的奇偶。更进一步,边对点的改变可以表示为:
有一个比较妙的性质:可以匹配当且仅当奇点个数为奇。很好理解:连边只有两端为黑才会
由性质可以用
然后任选一个根节点,生成任意原图生成树,
CF Official Editorial
Code
CF1037E Trips
倒推题。
处理出最终状态,由不满足要求的枝端节点开始删边,注意标记一条边只可被删一次就无效。
Code
CF936B Sleepy Game
记搜+判环题。
Code
CF920E Connected Components?
BruteForce!
先将每个点丢入set
,按顺序取出点进行操作。
对于从set中取出的每个点
queue
循环找同一连通分量的点。遍历目前仍在set
中的所有点,若无删边相连则说明在同一连通分量,将这一点放入queue
;执行遍历直至更新出所有同一连通分量的点并从set
中移除。
Why do you use set
?---
Code
for(ll i = 1; i <= n ; i++) w.insert(i);
while(w.size()){
it = w.begin();
ll x = *it; it = w.erase(it);
++tot, cnt[tot]++;
queue<ll> q;
q.push(x);
while(!q.empty()){
ll u = q.front(); q.pop();
for(it = w.begin(); it != w.end(); )
if(e[u].count(*it)) ++it;
else cnt[tot]++, q.push((*it)), it=w.erase(it);
}
}
CF33D Knights
隐式图、建图。
由于圆不相交,只需将大圆包含小圆看作树上父子节点即可。
注意处理根节点为最外侧一个极大的虚拟圆,包含关系特判极大值即可。
Code
CF545E Paths and Trees
最短路,最小生成树。
给定源点,求最小权最短路径生成树。
显然对于每一个非源点,确定父边(父节点入边)即可确定树的形态。
Code
CF1280C Jeremy Bearimy
贪心?
每个点必须匹配———
对于点u的父边(向上连边):
最小值:最优为点对尽可能在子树内,最坏有子树奇数个点,贡献为
最大值:最优为点对尽可能跨过这条边,最坏有
Code
CF949C Data Center Maintenance
Tarjan缩点。
将“若
注意到有向图单一强连通分量必须同步改变,也可能使其他分量改变。因此缩点后得到DAG上出度为
Code
CF533B Work Group
树形DP。
状态转移方程:
f[u][0] = 0, f[u][1] = -inf;//f[u][1] is illegal at first
for(auto v : e[u]){
dfs(v); ll x0 = f[u][0], x1 = f[u][1];
f[u][0] = max(x0 + f[v][0], x1 + f[v][1]);
f[u][1] = max(x1 + f[v][0], x0 + f[v][1]);
}
f[u][1] = max(f[u][1], f[u][0] + v[u]);
CF609E Minimum spanning tree for each edge
最小生成树。
对于边
Code
CF1067B Multihedgehog
BFS?DFS?
笔者最初考虑以树的重心作为根节点,然而WA,该猜想目前没有甚么证明。
考虑从每个叶子节点BFS,最后得到根节点。然后DFS判断每个节点的子节点出度是否
正确性:对于一个合法图,
Code
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】