图论
真正的天选之人
谁才是真正的天选之人!!!!
展开
-
网络流
先上个模板 #include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <queue>#include <iostream>using namespace std;#define INF 0x3f3f3f3f...原创 2018-10-08 20:14:23 · 131 阅读 · 0 评论 -
hdu 1511 最小路径覆盖问题
一开始读了题以为是拓扑排序求几个入度是0;但是wa,队友说人走过了不能回头走了,那就不能走另一个岔路了;貌似对哈。。。。然后用二分图匹配一下 最小路径覆盖=n-最大匹配数;#includeusing namespace std;struct node{ int u,next;} e[400];int f[200],book[200],head[200];int原创 2017-07-28 15:20:26 · 267 阅读 · 0 评论 -
hdu 1498 最小顶点覆盖
也是最小定点覆盖问题只是多了点东西;#includeusing namespace std;int map1[200][200];struct node{ int u,next;} e[400];int f[200],book[200],color[200],out[200];int n,k;int dfs(int x,int c){ for(int原创 2017-07-28 15:16:32 · 279 阅读 · 0 评论 -
hdu 1498 最小顶点覆盖
也是最小定点覆盖问题只是多了点东西;#includeusing namespace std;int map1[200][200];struct node{ int u,next;} e[400];int f[200],book[200],color[200],out[200];int n,k;int dfs(int x,int c){ for(int i=原创 2017-07-28 15:16:30 · 345 阅读 · 0 评论 -
hdu 2119 最小顶点能覆盖
将长和宽匹配一下;求最少几个点可以让已知边都有关系;#includeusing namespace std;int map1[200][200];struct node{ int u,next;}e[400];int top,head[200],f[200],book[200];void add(int u,int v){ e[top].u=v; e原创 2017-07-28 15:13:42 · 192 阅读 · 0 评论 -
hdu 2768 二分图匹配
这题考的貌似是建边;如果俩人喜欢和讨厌有冲突那么俩人之间建边;跑二分图匹配求最大匹配;再用总人数一减就是结果;#includeusing namespace std;struct qq{ int u,next;}g[505];int top;int head[505],f[505],book[505];int map1[505][505];void add(原创 2017-07-28 15:09:53 · 193 阅读 · 0 评论 -
hdu 2444 二分黑白染色法+最大匹配数
先用二分染色判断是不是二分图然后再进行最大匹配#includeusing namespace std;#define ll long long#define me(a) memset(a,-1,sizeof(a))struct node{ int u,next;}e[20005];int top;int book[20005];int head[20005];v原创 2017-08-01 15:38:15 · 318 阅读 · 0 评论 -
poj 3249 DAG求最短路
给出一张有向图,每个点有点权,现要从一条入度为0的点到一个出度为0的点,问最大点权和用拓扑排序的顺序+一个dp数组更新最大路径值#include #include #include#includeusing namespace std;#define ll long longstruct node{ int u,next;}e[1111111];int top,h原创 2017-08-18 19:49:10 · 277 阅读 · 0 评论 -
边双联通模板
出自学校大佬:http://blog.csdn.net/mengxiang000000/article/details/53454866#include#include#includeusing namespace std;int n,m,sig,cnt,tt;int dfn[50050];int low[50050];int vis[50050];int stack[5005转载 2017-08-18 19:45:17 · 227 阅读 · 0 评论 -
poj 3160 强连通+最长路
题意:给定n个点 m条有向边的图 ,每个点的点权。问:遍历一遍图能得到的最大点权(对于经过的点,可以选择是否获得该点点权,但每个点只能被获得一次)。起点可以任意。先将整个图缩点,然后建立一个超级源点,再跑一边最长路就好了。(最长路最好用spfa,队列优化dij超时,我试是这样)#include#include#include#include#includeusing原创 2017-08-18 19:41:47 · 352 阅读 · 0 评论 -
hdu 4750 最小生成树
题意:南京理工大学有很多景点。两个景点组成一对。两个景点的价值用这种方式计算:设两个景点之间一条路径中最长的一条路的距离是s,这两个景点的价值f就是所有路径中s的最小值。游客想要找价值大于等于t的景点对有多少个。#include #include#include #includeusing namespace std;struct node{ int u,v,val;}原创 2017-09-05 21:02:51 · 239 阅读 · 0 评论 -
poj 1459 dinic模板
#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>#include <queue>#include <iostream>using namespace std;#define INF 0x3f3f3f3fstruct ...原创 2018-09-19 19:42:50 · 133 阅读 · 0 评论 -
无汇源有上下界网络流zoj 2314
设超级源点st,汇点ed;对于一个点i;设low[i]为其下界w为其上界,有flow=w-low[i];if(flow>0)add(st,i,flow)if(flow<0)add(i,ed,-flow)求st->ed最大流,看是不是满流(st邻边都满流)。#include <cstdio>#include <cstring>#...原创 2018-09-12 17:41:52 · 199 阅读 · 0 评论 -
codeofrces 1037D bfs
将每层节点存到set里在用另一个set题目给的序列,比较一下就可以了。#include<iostream>#include <cstring>#include<bits/stdc++.h>using namespace std;#define LL long longvector<int>g[511111];int a[511111...原创 2018-09-07 20:53:45 · 198 阅读 · 0 评论 -
最小费用流 poj 2135
#include<stdio.h>#include<string.h>#include<queue>using namespace std;#define LL long long#define INF 0x3f3f3f3fstruct node{ int u,v,w,val,next,num;}e[1111111];int head[...原创 2018-05-14 19:10:37 · 140 阅读 · 0 评论 -
hdu 1565 最大点全独立集
/*二分图最小点权覆盖从x或者y集合中选取一些点,使这些点覆盖所有的边,并且选出来的点的权值尽可能小。二分图最大点权独立集在二分图中找到权值和最大的点集,使得它们之间两两没有边。其实它是最小点权覆盖的对偶问题。答案=总权值-最小点覆盖集*/#include<bits/stdc++.h>using namespace std;#define LL long long#...原创 2018-05-14 14:17:42 · 235 阅读 · 0 评论 -
uva live 4043 km
km模板#include <stdio.h>#include<vector>#include<queue>#include<bits/stdc++.h>using namespace std;#define eps 1e-7const double inf=999999999999999.;struct Dian{ doubl...原创 2018-04-03 22:34:10 · 165 阅读 · 0 评论 -
hdu 3605 二分图多重匹配
题目大意: N(N#includeusing namespace std;int map1[100005][15],top,book[15],f[15][100005],cnt[15],w[15];struct node{ int u,next;}e[100010*3];/*void add(int u,int v){ e[top].u=v; e[top].n原创 2017-10-21 12:52:21 · 223 阅读 · 0 评论 -
poj 1486 二分图的必须边
题意: 一些幻灯片,有一些数字在幻灯片里面,看能不能使得一个数字只能对应一张幻灯片.第一行代表有几张幻灯片.给出这几张幻灯片的坐标,接着n行代表1-n个数字对应的坐标,然后要求你打印一个确定的使一个数字对应一张幻灯片.如果不能对应输出none.存在某些幻灯片只能由某个数字代表的话就按字典序打印出这些幻灯片和对应的数字.#include#include#include原创 2017-10-21 12:49:28 · 210 阅读 · 0 评论 -
hdu 3062 2-sta
Problem Description有n对夫妻被邀请参加一个聚会,因为场地的问题,每对夫妻中只有1人可以列席。在2n 个人中,某些人之间有着很大的矛盾(当然夫妻之间是没有矛盾的),有矛盾的2个人是不会同时出现在聚会上的。有没有可能会有n 个人同时列席? Inputn: 表示有n对夫妻被邀请 (n m: 表示有m 对矛盾关系 ( m 在接下来的m行中,每行会有4个数字,分原创 2017-10-21 12:44:06 · 286 阅读 · 0 评论 -
hdu 5441 最小生成树
#includeusing namespace std;int head[40000],top;int f[40000];long long r[40000];int find(int x){ if(x==f[x]) return x; else return f[x]=find(f[x]);}struct node{ int u,原创 2017-09-14 19:54:29 · 259 阅读 · 0 评论 -
hdu 5952 暴力搜索
题意:给一个无向图,问大小为S的团有多少个。直接暴力搜索,但是建图从小到大建能避免重复,然后dfs暴力枚举+判断#includeusing namespace std;#define inf 0x3f3f3f3fint head[2005],top;int map1[300][300];struct node{ int u,v,next;}e[3000];int s原创 2017-10-08 14:07:24 · 213 阅读 · 0 评论 -
二分图性质总结
【无向图的最大独立数】: 从V个顶点中选出k个顶,使得这k个顶互不相邻。 那么最大的k就是这个图的最大独立数。【无向图的最大团】: 从V个顶点选出k个顶,使得这k个顶构成一个完全图,即该子图任意两个顶都有直接的边。【最小路径覆盖(原图不一定是二分图,但必须是有向图,拆点构造二分图)】:在图中找一些路径,使之覆盖了图中的所有顶点,且任何一个顶点有且只有一条路径与之关联。最小路径覆盖原创 2017-09-08 18:40:19 · 255 阅读 · 0 评论 -
poj 2672
题意:有 n 个房间,不同房间之间有单向通道,问是否任意两个房间 A 、B 都可以从 A 到 B 或从 B 到 A(有一条有就可以)。那就是问缩点之后的图能不能是一条线下来。因为连通分量里的点肯定能互相到达,而不是连通分量的点如果是一条线也可以啊。所以是强连通家拓扑排序就可以ok了。#include#include#include#include#includeusing n原创 2017-08-18 19:36:27 · 283 阅读 · 0 评论 -
poj 2186 强连通缩点求出度为0点是否唯一
题目大意:题目大意是:在一个牧群中,有N个奶牛,给定M对关系(A,B)表示A仰慕B,而且仰慕关系有传递性,问被所有奶牛(除了自己)仰慕的奶牛个数求出出度为0的点是否唯一,如果唯一那么输出点的个数,如果不为0,那么结果肯定是0了。因为不管它如果不在图中那么肯定不成#include#include#include#include#includeusing namespace std;#原创 2017-08-18 19:30:44 · 210 阅读 · 0 评论 -
hdu 1384 差分约束+spfa
约束条件为b-(a-1)>=0和0注意点为a-1可能为0;但是是0的话i-1就越界了;所以里代码a和b全加1;这题没有环;#include #include #include#include#includeusing namespace std;struct node{ int u,val; int next;}e[50005*4];int t原创 2017-07-22 17:38:25 · 224 阅读 · 0 评论 -
hdu 1317 spfa判环求最长路
#include #include #include#include#include#include#includeusing namespace std;vectorG[300];int book[300],val[300],dis[300],time[300];#define inf 0x3f3f3fint spfa(int n){ memset(book,0,原创 2017-06-27 14:15:31 · 311 阅读 · 0 评论 -
poj 3159 差分约束
队列优化dij#include #include #include#include#include#include#include#includeusing namespace std;struct node{ int v,val;};#define inf 0x3f3f3fvector >g;int book[40000],dis[40000];typede原创 2017-07-21 11:50:18 · 226 阅读 · 0 评论 -
二分图匹配 hdu 1068
要找没关系的人是多少,首先要找到有关系的,所以先进行一次匹配,是相互认识的总人数,在除2就是认识的人一半的人数,再和不认识的加在一起,即相互不认识的最大值#include #include #includeusing namespace std;int e[1000][1000];char ss[2000][2000];int book[1000];int f[1000];原创 2017-07-20 19:40:58 · 189 阅读 · 0 评论 -
拓扑排序 hdu 2094
找到入度为0的点,也就是说没输过的点,如果总数为1个就是唯一冠军,如果不唯一那么冠军不确定,输出-1;#include#include#include#include#include#includeusing namespace std;char ss[500],ss1[500];int g[500][500];int indegree[500];int main(){原创 2017-07-20 19:37:31 · 298 阅读 · 0 评论 -
拓扑排序 hdu 2647
反向建边,因为最后的是888,所以反向建进行拓扑排序,再用一个数组存储拓扑当前位置的金额;#include#include#include#include#include#includeusing namespace std;vectorg[10005];int indegree[10005];int price[10005];int main(){ int n,原创 2017-07-20 19:34:49 · 219 阅读 · 0 评论 -
二分图匹配 匈牙利算法 hdu 4185
#include #include #include#define ll long long#define N 300010using namespace std;int e[1000][1000];int map2[1000][1000];char map1[1000][1000];int book[1000];int f[1000];int cont;int dfs原创 2017-07-20 12:59:01 · 219 阅读 · 0 评论 -
hdu 1811 拓扑排序+并查集判断
拓扑排序的两个性质:①如果一次入队入度为零的点大于1则说明拓扑排序序列不唯一②如果排序的总个数小于给定的个数,则说明存在回路#include#include#include#include#includeusing namespace std;struct node{ int a,b; char c;} q[30000];int indegree[30000];原创 2017-06-27 15:00:35 · 265 阅读 · 0 评论 -
dij优化改解次短路 poj 3255
<img data-cke-saved-src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA80AAALgCAYAAACu85WpAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAAEnQAABJ0Ad5mH3gAAP+lSURBVHhe7J0HoJ5F0f0nAQJC6CigtEQQE...原创 2017-05-09 13:25:40 · 21650 阅读 · 0 评论 -
poj 3723 kruskal最大权值树
和最小生成树一样只是排序是从大到小排序#include#include#include#include#define ll long longusing namespace std;#define inf 0x3f3f3fstruct edge{ int fr,to,val;}e[50005];bool cmp(edge a,edge b){ retu原创 2017-05-09 14:55:07 · 205 阅读 · 0 评论 -
hdu3790
Dijkstra算法加了一点小判断#include#include#include#include#include#define ll long long#define inf 0x3f3f3f3fusing namespace std;int book[1011],vis[1011],tm[1011][1011],tm1[1011];int dis[1011][1001];原创 2017-03-23 13:39:12 · 491 阅读 · 0 评论 -
hdu 2066
这题就是裸的Dijstra最短路#include#include#include#include#include#define ll long long#define inf 0x3f3f3f3fusing namespace std;int book[1011],vis[1011];int dis[1011][1001];int main(){ int t,s,原创 2017-03-23 11:42:54 · 196 阅读 · 0 评论 -
hdu 5154 拓扑排序 判有没有环
#includeusing namespace std;int indegree[300];int g[300][300];int main(){ int n,k; while(~scanf("%d%d",&n,&k)) { memset(indegree,0,sizeof(indegree)); memset(g,0,sizeof(原创 2017-08-01 15:32:13 · 245 阅读 · 0 评论 -
hdu 拓扑排序+并查集
题目大意:有一些池塘,每一个池塘都有一个价值,现在想删除一些池塘。有如下删除条件:1、一个池塘有两个管道连接的不可以删除。2、求最后剩下的为奇数环的池塘的价值。先用拓扑排序的思路将两个一下连接的全删除只有用并查集统计数目#includeusing namespace std;#define ll long longint indegree[200000];vectorg原创 2017-08-01 15:35:33 · 229 阅读 · 0 评论 -
hdu 1054 最小定点覆盖
就是求最小定点覆盖数#includeusing namespace std;#define ll long long#define me(a) memset(a,-1,sizeof(a))struct node{ int u,next;}e[1505];int top,head[1505],f[1505],book[1505];vectorg[1505];void add原创 2017-08-01 15:39:40 · 310 阅读 · 0 评论