图论-------------------------
文章平均质量分 57
Toooooocold
这个作者很懒,什么都没留下…
展开
-
UVALive 6322 The Swapping Game
二分图,但是要考虑字典序,所以每一行的字符串排序后,一个一个字符建到图中看是否符合最大匹配。感觉二分图还是建两倍的点,然后互相标记,就不用考虑是那一边进行匹配的了。#includeusing 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 · 255 阅读 · 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 · 350 阅读 · 0 评论 -
CodeForces Gym101158H Animal Companion in Maze
给一张图,图上的边有单向边也有双向边。双向边有一项限制是,当使用一条双向边从A->B时,不可以立刻使用这条边回去。如果图中有环,输出INF,否则输出最长路径长度。原创 2017-11-28 16:23:04 · 453 阅读 · 0 评论 -
CodeForces 864F Cities Excursions
Problem:3e3个点的有向图,4e5个询问,求s到t的字典序最小的路径上的第k个点,无解输出-1原创 2017-09-26 12:26:09 · 343 阅读 · 2 评论 -
HDU 6166 Senior Pan
官方题解: 比赛的时候用错误算法过了。。。来补一波正解。 正解好屌。原创 2017-08-23 13:45:09 · 294 阅读 · 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 · 203 阅读 · 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 · 452 阅读 · 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 · 209 阅读 · 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 · 260 阅读 · 0 评论 -
HDU 6016 Count the Sheep
比赛时是用右边的点存了他连向的左边的点所能连向的右边的点数。感觉怪怪的。赛后题解时用遍历每条中间的边做的,我的做法相当于遍历每条开始的边做的。题解的做法好看多了。我的做法:#includeusing namespace std;typedef long long ll;const int MAXN = 1e5+5;vector G[2*MAXN];l原创 2017-02-26 14:34:14 · 291 阅读 · 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 · 527 阅读 · 0 评论