图论-------------------------
文章平均质量分 56
Toooooocold
这个作者很懒,什么都没留下…
展开
-
UVALive 6322 The Swapping Game
二分图,但是要考虑字典序,所以每一行的字符串排序后,一个一个字符建到图中看是否符合最大匹配。 感觉二分图还是建两倍的点,然后互相标记,就不用考虑是那一边进行匹配的了。 #include using namespace std; int len1, len2[105], lk[105], ans[105]; char s1[105], s2[105][10]; vector g[105原创 2017-02-11 14:33:56 · 271 阅读 · 0 评论 -
CodeForces Gym101173 Bipartite Blanket
Source:Source:Source: 2016-2017 ACM-ICPC, Central Europe Regional Contest (CERC 16) Problem:Problem:Problem: 给你一个二分图,每个点都有点权,问这个图有多少个子集,满足点权之和不小于给定值ttt,并且被某个匹配覆盖。 Idea:Idea:Idea: 容易证明若XXX集存在子集AAA属于...原创 2017-12-13 16:28:50 · 393 阅读 · 0 评论 -
CodeForces Gym101158H Animal Companion in Maze
给一张图,图上的边有单向边也有双向边。双向边有一项限制是,当使用一条双向边从A->B时,不可以立刻使用这条边回去。如果图中有环,输出INF,否则输出最长路径长度。原创 2017-11-28 16:23:04 · 528 阅读 · 0 评论 -
CodeForces 864F Cities Excursions
Problem:3e3个点的有向图,4e5个询问,求s到t的字典序最小的路径上的第k个点,无解输出-1原创 2017-09-26 12:26:09 · 379 阅读 · 2 评论 -
HDU 6166 Senior Pan
官方题解: 比赛的时候用错误算法过了。。。来补一波正解。 正解好屌。原创 2017-08-23 13:45:09 · 311 阅读 · 0 评论 -
UVALive 5906 Smoking gun
差分约束+拓扑排序 第一次写差分约束,记录下。 代码: #include #define fi first #define se second #define pb push_back #define lson o<<1 #define rson o<<1|1 #define CLR(A, X) memset(A, X, sizeof(A)) using namespace std;原创 2017-07-12 11:26:18 · 216 阅读 · 0 评论 -
HDU 6041 I Curse Myself
仙人掌图。 每个环删一条边就能得到一棵生成树。 每个环都是一个边集,跑出点双连通后,可以用优先队列将这些边集合并出前K大的合集。 输出%u,就不用再对(1 代码: #include #define fi first #define se second #define pb push_back #define CLR(A, X) memset(A, X, sizeof(A)) us原创 2017-07-27 20:07:23 · 481 阅读 · 0 评论 -
UVALive 4999 Electricity Connection
最小斯坦纳树:求图G的一个真子集里面的所有点连通,且总边权值和最小的生成树称为MinimalSteinerTree(最小斯坦纳树)。模板: dp[u][state]表示以u为根,指定集合中的点的连通状态为state的生成树的最小总权值。 1.通过连通状态的子集进行转移。 dp[u][state]=min{ dp[u][sub1]+dp[u][sub2] | sub1^sub2 == state原创 2017-08-09 23:23:38 · 225 阅读 · 0 评论 -
Codeforces 732F Tourist Reform
先用边-双连通的方式缩点,然后就能发现包含城市最多的那个点就是答案。点内肯定有环,直接连就行了,剩下的割边都指向城市最多的那个点。 代码: #includebits/stdc++.h> using namespace std; typedef pairint, int> PII; const int MAXN= 4e5+5; vectorPII> G[MAXN]; vectorP原创 2016-12-01 23:50:02 · 298 阅读 · 0 评论 -
HDU 6016 Count the Sheep
比赛时是用右边的点存了他连向的左边的点所能连向的右边的点数。 感觉怪怪的。 赛后题解时用遍历每条中间的边做的,我的做法相当于遍历每条开始的边做的。 题解的做法好看多了。 我的做法: #include using namespace std; typedef long long ll; const int MAXN = 1e5+5; vector G[2*MAXN]; l原创 2017-02-26 14:34:14 · 302 阅读 · 0 评论 -
【斯坦纳树】18牛客多校1G Steiner Tree
Source:牛客网暑期ACM多校训练营(第一场) Problem:求斯坦纳树的个数 Idea:斯坦纳树的dp分成两个部分,其中第一部分dp[S][u]→dp[S][v]dp[S][u] \to dp[S][v]dp[S][u]→dp[S][v]通过最短路更新,不会算重复,定义这一部分得到的斯坦纳树为fff,最后一步为根的延伸。第二部分dp[S0][u]+dp[S0⊕S][v]→dp[S][v]d...原创 2018-12-04 18:01:44 · 537 阅读 · 0 评论