————图论
mengbi_er
一个蒟蒻JLoier
展开
-
bzoj1191: [HNOI2006]超级英雄Hero
裸的二分图匹配,从前往后匹配,匹配不到直接跳出。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9') ch=getchar()原创 2017-07-04 22:14:18 · 170 阅读 · 0 评论 -
bzoj3714: [PA2014]Kuglarz
这题真是妙啊,只要知道所有所有[1,i]的和就能确定最后的值,当我们知道sum[i-1],询问一次[i,j],就知道了sum[j],这样我们可以用最小生成树来解决问题。对于[i,j],连一条从i-1到j的边。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;in原创 2017-11-18 17:05:37 · 207 阅读 · 0 评论 -
bzoj5056: OI游戏
我们van♂游戏233。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch原创 2017-11-03 21:16:44 · 337 阅读 · 0 评论 -
bzoj1672: [Usaco2005 Dec]Cleaning Shifts 清理牛棚
将时间视为一个点,相邻两点连长度0的边,将每个牛连u到v+1的边,spfa即可。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q;int read(){ char ch=getchar();i原创 2017-10-09 10:27:51 · 496 阅读 · 1 评论 -
bzoj3732: Network
求一边最小生成树就能保证两点之间边最小,然后lca搞搞就行了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9')ch=get原创 2017-09-08 08:45:10 · 244 阅读 · 0 评论 -
bzoj1821: [JSOI2010]Group 部落划分 Group
最小生成树裸题没看出来QAQ,连通块数小于k就输出。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<cmath>using namespace std;int read(){ char ch=getchar();int f=0;原创 2017-09-05 20:20:36 · 279 阅读 · 0 评论 -
bzoj4720: [Noip2016]换教室
dp裸题,求一遍floyd,dp式 f[i][j][0]=min(f[i−1][j][0]+(double)dis[c[i−1]][c[i]],f[i−1][j][1]+(1.0−k[i−1])∗(double)dis[c[i−1]][c[i]]+k[i−1]∗(double)dis[d[i−1]][c[i]]);f[i][j][0]=min(f[i-1][j][0]+(double)dis[c[原创 2017-09-05 19:15:34 · 344 阅读 · 0 评论 -
bzoj4242: 水壶
码了一上午,真是菜啊。 每个建筑都有一块占领区域,当两块区域相连,对两个建筑连长度为建筑到这个点到另一个建筑距离的边,求一遍最小生成树,之后每个询问就求倍增lca维护边权最大值就可以了。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<vector>原创 2017-08-22 10:47:27 · 403 阅读 · 0 评论 -
bzoj1797: [Ahoi2009]Mincut 最小割
首先一定跑一遍最小割,在残量网络上tarjan一遍 (1) 满足u和v不在同一个强连通分量且有流通过。 (2)满足(1)且u在s的强连通分量,v在t的强连通分量。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<stack>using namesp原创 2017-07-28 15:56:53 · 278 阅读 · 0 评论 -
bzoj3444: 最后的晚餐
有两种情况输出0:成环和一个点度数为3以上,对于一条链可以翻转,所以答案2^链数*连通块个数阶乘。 写的太丑了QAQ.#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int read(){ char ch=getchar();int f=0;原创 2017-07-16 14:34:27 · 276 阅读 · 0 评论 -
bzoj1648: [Usaco2006 Dec]Cow Picnic 奶牛野餐
对每头牛能到的点做bfs,对每个点检查是否所有牛都能到达。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q;int k,n,m,head[1005],tot,a[105];bool vis[105][原创 2017-07-06 19:42:25 · 329 阅读 · 0 评论 -
bzoj3546: [ONTAK2010]Life of the Party
传送门#include <bits/stdc++.h>using namespace std;#define mpr make_pairconst int N = 20050;const int M = 100050;const int oo = 0x3fffffff;inline int in(int x=0,char s=getchar()) { while(s>'9'||s<'0')s=原创 2017-07-05 19:43:52 · 323 阅读 · 0 评论 -
bzoj3408: [Usaco2009 Oct]Heat Wave 热浪
裸最短路。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>#include<vector>using namespace std;int n,m,tot,head[2505],s,t,dis[2505];struct cmp{ bool operator原创 2017-07-05 19:18:54 · 352 阅读 · 0 评论 -
bzoj2662: [BeiJing wc2012]冻结
分层图最短路,每层正常建图,相邻两层间建w/2的边。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q;struct node{ int from; int to; int w;原创 2017-07-05 19:10:04 · 321 阅读 · 0 评论 -
Codeforces Round #420 (Div. 2) D - Okabe and City
好像并不太懂啊,先挖坑。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int inf=0x7f7f7f7f;int read(){ char ch=getchar();int f=0; while(ch<'0'||ch>'9'原创 2017-06-26 14:28:12 · 306 阅读 · 0 评论 -
bzoj2834: 回家的路
对于同一行和同一列的相邻的点分别建边。对行和列分层。建长度为1的边,之后SPFA即可。具体细节看代码。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<queue>using namespace std;queue<int> q;struct point{ int x;原创 2017-06-12 21:03:42 · 449 阅读 · 2 评论 -
带花树算法浅谈&&bzoj4405: [wc2016]挑战NPC
带花树简介带花树用来求解一般图的最大匹配问题。前置技能基础图论知识。 极大匹配:对于一个匹配,若无法在原图中找到任意边加入匹配,则称该匹配为一个极大匹配。 最大匹配:一个图所有匹配中,所含匹配边数最多的匹配,称为这个图的最大匹配 。 交替路:从一个未匹配点出发,依次经过非匹配边、匹配边、非匹配边 … 形成的路径叫交替路。 增广路:对于一条路径,从一个未匹配点出发,走交替路,终止于另一个未匹配原创 2017-09-18 10:53:37 · 622 阅读 · 0 评论