
拓扑排序
sunyutian1998
这个作者很懒,什么都没留下…
展开
-
Big Brush CodeForces - 1638D
http://codeforces.com/contest/1638/problem/D 按题意着色则需要考虑先后次序问题,次序问题一般用拓扑解决。 #include <bits/stdc++.h> using namespace std; const int maxn=1e3+10; struct node { int x,y,c; }; queue <node> que; node ans[maxn*maxn]; int ary[maxn][maxn],book原创 2022-02-20 10:52:01 · 357 阅读 · 0 评论 -
Welcome Party ZOJ - 4109
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=4109 不开心总人数即连通块数 每个块出一个编号最小的人 贪心考虑 与其相识的人可以下批入场 优先队列维护拓扑即可 #include <cstdio> #include <cstring> #include <algorithm>...原创 2019-05-09 09:25:38 · 256 阅读 · 0 评论 -
The more, The Better HDU - 1561
http://acm.hdu.edu.cn/showproblem.php?pid=1561 先正向拓扑去掉无法到达的点 然后用剩下的点建一正一反两个图 然后逆向拓扑 当某点因度数为0而入队列时 说明正向图中他的所有后继节点(即从该点进行BFS能到达的所有点)都已遍历 这和树型DP的思想一样 只不过这里需要考虑的拓扑序稍复杂一些 这时可以想到利用01分组背包的思想 dp[i][j]代表从第i...原创 2019-04-16 22:17:48 · 281 阅读 · 0 评论 -
Gourmet choice CodeForces - 1131D
codeforces.com/problemset/problem/1131/D 先用并查集处理等号 通过大于小于号建图 拓扑判环 因为只把入度为0的点作为起点 所以拓扑可以顺带求出最长路 #include <cstdio> #include <cstring> #include <algorithm> #include <queue> ...原创 2019-03-09 12:25:34 · 209 阅读 · 0 评论 -
King's Rout Gym - 100792K
http://codeforces.com/gym/100792/problem/K 在普通拓扑基础上要求字典序最小 被压在最底下的元素最难满足 所以逆向考虑 #include <bits/stdc++.h> using namespace std; const int maxn=2e5+10; const int maxm=4e5+10; struct node1 { ...原创 2018-10-19 10:08:15 · 196 阅读 · 0 评论 -
等幂映射 51Nod - 1473
https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1473 每个点向外连一条边(包括自己) 问最少多少步使每个点同时回到每个点之前到过的点 首先肯定有环存在 环内的点就像在跑圈 环外的点要先进入跑道才能开始跑圈 环内点为了等环外点只能一圈圈的跑 跑了一圈环外点没到环内 必须再跑一圈 #include <...原创 2018-10-16 14:28:07 · 251 阅读 · 0 评论 -
Trips CodeForces - 1037E
http://codeforces.com/contest/1037/problem/E 逆向考虑 先拓扑把度数小于k的点入队列松驰其他点 最后剩下的点的数量就是最后一次查询的答案 然后逆向枚举删边 还是拓扑 把度数小于k的点入队列 删完当前这条边后 有几个点度数变为小于k 答案就减几 注意无向图拓扑时边要特判 #include <bits/stdc++.h> using n...原创 2018-09-04 00:55:19 · 763 阅读 · 0 评论 -
逃生 HDU - 4857
点击打开链接 反向考虑 这样才能解决"穷人在后"的问题 反例: 6 1 6 1 #include <bits/stdc++.h> using namespace std; struct node1 { int v; int next; }; struct node2 { bool friend operator < (node2 n1,node2 n2) ...原创 2018-03-23 14:56:48 · 237 阅读 · 0 评论 -
Window Pains POJ - 2585
点击打开链接 这道题主要是建图 看每个点会被哪几种数字覆盖 未出现的数字向出现的数字建边 然后就是裸题 #include <cstdio> #include <queue> #include <vector> #include <cstring> #include <algorithm> using namespace std; ...原创 2018-03-30 12:36:05 · 154 阅读 · 0 评论 -
Rank of Tetris HDU - 1811
点击打开链接 题目要求 当冲突和多解并存时 要判为冲突 所以不能发现多解就停止.. #include <bits/stdc++.h> using namespace std; struct node1 { int u; int v; char ch[2]; }; struct node2 { int v; int next; }; queue <int>...原创 2018-03-30 12:42:34 · 171 阅读 · 0 评论 -
Ponds HDU - 5438
点击打开链接 无向图拓扑排序 和有向图拓扑在一些小细节上有些区别 可能会出现度数为负数的情况 最稳妥的方法就是在每个点拓扑入队列时标记 这样才能保证所有度为0或1的点都被删掉了 #include <bits/stdc++.h> using namespace std; typedef long long ll; const int maxn=1e4+10; const in...原创 2018-04-11 09:00:28 · 286 阅读 · 0 评论 -
Paint the Grid Again ZOJ - 3780
点击打开链接 给一个白板 每一次可以把一行涂黑或者把一列涂白 逆向考虑的话 每涂完一次都会有一行全黑或者有一列全白 找出来更新当前状态 然后挑字典序最大的继续更新即可 若最后能把每个空都更新一遍就是一张符合题意的图 至于次数最少的问题 其实只要是一张存在正确着色方式的图 那么该涂多少次都是固定不变的 因为每一次只能把一行涂黑或者把一列涂白 而不是每一行每一列涂成黑白都行(一开始就是看错题了的...原创 2018-04-25 22:20:37 · 148 阅读 · 0 评论 -
Hash Function 牛客网多校
https://www.nowcoder.com/acm/contest/142/J 这题竟然卡memset.. 一开始t了以为数组开小了 就往大了搞.. 首先是判矛盾 如果i位置上的一个数ary[i] 本来应该在ary[i]%n=j处 那j到i之间肯定不能有负数 前缀和判断一下 如果暂时没矛盾 那就将从j到i-1的位置都向i连一条边 因为ary[i]这个数会出现在i这个位置就是因为j到i-...原创 2018-07-29 14:52:37 · 275 阅读 · 0 评论