08 2015 档案

摘要:求一下权值最小的桥。第一坑:如果图不连通,不用派人去炸桥,直接输出0第二坑:可能会有重边第三坑:如果桥上没有士兵守着,那至少要派一个人去炸桥。#include#include#include#include#includeusing namespace std;const int maxn = 10... 阅读全文
posted @ 2015-08-29 12:16 Fighting_Heart 编辑
摘要:强连通分量+缩点+公式推导缩点之后,记录一下每个缩点的真实点有几个,计算一个每个点的入度与出度,然后找出入度或出度为0,并且真实点个数最少的那个缩点,其余的点都可以随便连边了,这个缩点只能单向的向外界连边。#include#include#include#include#includeusing n... 阅读全文
posted @ 2015-08-29 11:26 Fighting_Heart 编辑
摘要:边双连通分量+缩点#include#include#include#include#includeusing namespace std;const int maxn = 10000 + 10; const int Maxn = 2 * 100000 + 10; int low[maxn];int ... 阅读全文
posted @ 2015-08-28 21:36 Fighting_Heart 编辑
摘要:输出桥。#include#include#include#include#includeusing namespace std;const int maxn = 10000 + 10;const int Maxn = 2 * 100000 + 10; int low[maxn];int dfn[ma... 阅读全文
posted @ 2015-08-28 17:01 Fighting_Heart 编辑
摘要:之前对Kosaraju_Algorithm理解有误,现在彻底明白了。Kosaraju_Algorithm:• step1:对原图G进行深度优先遍历,记录每个节点的离开时间。形成了一个森林(很多树)。• step2:选择具有最晚离开时间的顶点,对反图GT进行遍历,删除能够遍历到的顶点,这些顶点构成... 阅读全文
posted @ 2015-08-28 12:58 Fighting_Heart 编辑
摘要:给出一个无向图,你可以加一条边,使得加上边之后的图割边数量最少。方法:每个边双连通分量缩点,形成一个树,树上的每条边都是割边,割边数量为S1;接下来只要算出树上最长路径(树的直径)就可以了,最长路径两段连线,路径上的割边都不可能再成为割边了,记最长路径长度为S2;Ans=S1-S2;第一步可以用Ta... 阅读全文
posted @ 2015-08-27 21:59 Fighting_Heart 编辑
摘要:最大流+拆点#include#include#include#include#include#include#includeusing namespace std;const int maxn = 2000 + 10;const int INF = 0x7FFFFFFF;struct Edge{ ... 阅读全文
posted @ 2015-08-25 21:27 Fighting_Heart 编辑
摘要:网络最大流TLE了两天的题目。80次Submit才AC,发现是刘汝佳白书的Dinic代码还可以优化。。。。。瞬间无语。。。。。#include#include#include#include#include#include#includeusing namespace std;const int m... 阅读全文
posted @ 2015-08-25 13:53 Fighting_Heart 编辑
摘要:最短路+最大流#include#include#include#include#include#include#includeusing namespace std;const int maxn=1000+10;const int MAXN=100000+10;const int INF=0x7FF... 阅读全文
posted @ 2015-08-23 16:03 Fighting_Heart 编辑
摘要:二分图的最大匹配+并查集每次匹配完之后,删除当前匹配到的边。#include#include#include#includeusing namespace std;const int MAXN=505;int nx,ny;int g[MAXN][MAXN];int cx[MAXN],cy[MAXN]... 阅读全文
posted @ 2015-08-23 07:58 Fighting_Heart 编辑
摘要:网络最大流+拆点。输出有坑!!!#include#include#include#include#include#include#includeusing namespace std;const int maxn=2000+10;const int INF=0x7FFFFFFF;struct Edg... 阅读全文
posted @ 2015-08-22 16:21 Fighting_Heart 编辑
摘要:最小割一个点拆成两个AddEdge(i,i+N,x);原图中的每条边这样连AddEdge(u+N,v,INF);AddEdge(v+N,u,INF);S是源点,t+N是汇点。最大流就是答案。#include#include#include#include#include#include#includ... 阅读全文
posted @ 2015-08-22 14:15 Fighting_Heart 编辑
摘要:最小割+输出方案#include#include#include#include#include#include#includeusing namespace std;const int maxn=1000+10;const int INF=0x7FFFFFFF;struct Edge{ in... 阅读全文
posted @ 2015-08-21 16:21 Fighting_Heart 编辑
摘要:状态压缩+最大流因为最多只有10个星球,所以人最多只有1#include#include#include#include#include#includeusing namespace std;const int maxn = 1500 + 10;const int INF = 0x7FFFFFFF;... 阅读全文
posted @ 2015-08-21 10:47 Fighting_Heart 编辑
摘要:最大流+拆点#include#include#include#include#include#include#includeusing namespace std;const int maxn=1000+10;const int INF=0x7FFFFFFF;struct Edge{ int ... 阅读全文
posted @ 2015-08-19 10:26 Fighting_Heart 编辑
摘要:每个物品分开做最小费用最大流。#include#include#include#include#include#includeusing namespace std;const int maxn=1000+10;const int INF=0x7FFFFFFF;struct Edge{ int... 阅读全文
posted @ 2015-08-19 08:34 Fighting_Heart 编辑
摘要:最小费用最大流#include#include#include#include#include#includeusing namespace std;//设置节点数量const int maxn=1000+10;const int INF=0x7FFFFFFF;struct Edge{ int... 阅读全文
posted @ 2015-08-18 09:40 Fighting_Heart 编辑
摘要:网络最大流水题#include#include#include#include#include#include#include#includeusing namespace std;const int maxn=1000+10;const int INF=0x7FFFFFFF;struct Edge... 阅读全文
posted @ 2015-08-17 22:51 Fighting_Heart 编辑
摘要:这个题写了一天,现在才过......一开始想到了二分图的最大匹配,每种组合连边,算出最多的。结果仔细一想是错的,因为没有考虑到一个牛只能选一组。然后就想到开始建图跑最大流了,一开始采用了 源点-->牛-->食物in-->食物out-->饮料-->汇点 这样的模式建图。结果一直WA,看了Discuss... 阅读全文
posted @ 2015-08-16 16:38 Fighting_Heart 编辑
摘要:Description这个世界太无聊了,于是God Wang想出了新的运算符号$,对于两个数x,y来说x$y的值等于x和y各个位置上的数字乘积之和,没有的位按0来算比如说123$321=1*3+2*2+3*1=10,105$51=1*0+0*5+5*1=5。于是God Wang又有了新的问题,他定义... 阅读全文
posted @ 2015-08-15 16:52 Fighting_Heart 编辑
摘要:DescriptionGod Wang 是ZUFE的神犇,有一天他想到一种神奇的变换,并且将它命名为GodW变换对于一个数字n,该变换后的值GodW(n)为,先令X=n第一步,如果X为个位数,GodW(n)=X,否则执行第二步;第二步,X的奇数位置的数字之和为a,偶数位置的和为b, X=a*b, 执... 阅读全文
posted @ 2015-08-15 16:50 Fighting_Heart 编辑
摘要:最小生成树,主要是题目比较难懂。#include #include #include #include using namespace std;const int Maxn=2000+10;const int maxn=2000*2000+10;int Father[Maxn];struct Edg... 阅读全文
posted @ 2015-08-13 10:04 Fighting_Heart 编辑
摘要:#include#include#include#include#includeusing namespace std;struct node{ friend bool operator Q; for(int i=1;i<=n;i++) { node k; k.ID=i; k.Time=... 阅读全文
posted @ 2015-08-12 20:04 Fighting_Heart 编辑
摘要:循环节是2000000016字符串读入,用一下高精度对2000000016取个模,用一下快速幂就可以算出答案了。#include #include #includeusing namespace std;const long long MOD = 1e9+7;long long mod1(char ... 阅读全文
posted @ 2015-08-12 19:16 Fighting_Heart 编辑
摘要:先来一次线性素数筛,把1到10000000的素数都筛选出来,然后暴力跑一遍所有可能的值,打个表,查询的时候o(1)效率出解。#include#include#include#include#include#includeusing namespace std; const long N = 1000... 阅读全文
posted @ 2015-08-12 19:14 Fighting_Heart 编辑
摘要:优先级队列#include#include#include#include#includeusing namespace std;int n;int main(){ while(~scanf("%d",&n)) { int tot=0; priority_qu... 阅读全文
posted @ 2015-08-12 19:09 Fighting_Heart 编辑
摘要:Floyd水题#include#includeusing namespace std;int N;const int MAXN=1111;int Map[MAXN][MAXN],b[MAXN],path[MAXN][MAXN];int u[MAXN],v[MAXN];void init(){ ... 阅读全文
posted @ 2015-08-12 10:56 Fighting_Heart 编辑
摘要:强连通分量+缩点。一开始缩点之后用了平方的效率去处理,1200ms。。其实只要缩点之后把得到的图把每条边反向,每个节点统计一下入度,如果有多于一个点的入度大于0,答案肯定是0;否则答案就是那个入度为1的缩点里面牛的个数,360ms过了。#include#include#include#include... 阅读全文
posted @ 2015-08-12 10:00 Fighting_Heart 编辑
摘要:宇宙无敌超级大模版完全支持重边哦!~~第一次得到了验证!!!!这题和POJ3352是一模一样的。POJ3352题解,这里不再赘述,唯一区别就是重边,http://www.cnblogs.com/zufezzt/p/4722538.html完全支持重边的无敌模板:http://www.cnblogs.... 阅读全文
posted @ 2015-08-11 22:31 Fighting_Heart 编辑
摘要:题意就是至少加几条边,能够让原图没有桥。1. 首先要找出图G的所有【边双连通分量】。2、 把每一个【边双连通分量】都看做一个点(即【缩点】)3、 问题再次被转化为“至少在缩点树上增加多少条树边,使得这棵树变为一个双连通图”。首先知道一条等式:若要使得任意一棵树,在增加若干条边后,变成一个双连通图,那... 阅读全文
posted @ 2015-08-11 22:26 Fighting_Heart 编辑
摘要:判断是不是只有一个强连通分量,Kosaraju算法。/*有向图强连通分量的求解*/#include#include#include#include#includeusing namespace std;const int maxn=10000+10;vectorG[maxn];vectorFG[ma... 阅读全文
posted @ 2015-08-11 10:48 Fighting_Heart 编辑
摘要:因为给出的点都是整数,都在网格上的,所以正三角形,正五边形,正六边形都是不存在的。暴力枚举四个点,判断一下是不是正方形即可。#include#include#include#includeusing namespace std;int n;int x[30],y[30];class Coordina... 阅读全文
posted @ 2015-08-09 07:42 Fighting_Heart 编辑
摘要:先暴力写了一个DFS,然后找规律。。#include#include#include#includeusing namespace std;__int64 dp[1000];int main(){ dp[1]=1; dp[2]=2; dp[3]=3; dp[4]=5; ... 阅读全文
posted @ 2015-08-09 07:40 Fighting_Heart 编辑
摘要:状态压缩DP#include#includeconst int MOD=100000000;int dp[15][5000];int mapp[15][15];int main(){ int m,n; while(~scanf("%d%d",&m,&n)) { for... 阅读全文
posted @ 2015-08-08 21:32 Fighting_Heart 编辑
摘要:用栈来处理一下就好了。#include#include#include#include#includeusing namespace std;struct Mar{ int r,c;} mar[3000000];int n;char s[100000];int r,c,top,flag;Mar... 阅读全文
posted @ 2015-08-08 21:30 Fighting_Heart 编辑
摘要:求哪几条边是桥,用Tarjan算法,注意重边的处理。#include#include#include#include#includeusing namespace std;const int maxn=10000+10; //结点数量const int Maxn=2*100000+10; //边的数... 阅读全文
posted @ 2015-08-07 14:47 Fighting_Heart 编辑
摘要:无向图顶点连通度的求解,即最少删除多少个点使无向图不连通。我校“荣誉”出品的《图论算法理论、实现及其应用》这本书上写的有错误,请不要看了,正确的是这样的:对于每个顶点,分成两个点,v和v’;对于每个顶点,v到v’建边,容量为1;对于无向边(u,v),建边和容量为+∞;然后枚举每一对没有边直接相连的点... 阅读全文
posted @ 2015-08-06 19:30 Fighting_Heart 编辑
摘要:乱搞题...第一直觉是混合图的欧拉通路,但是感觉并没有多大关系。最终AC的做法是不断的寻找欧拉通路,然后给边标号。所有边访问了一遍,所有点访问了一遍,效率是o(n+m)。不存在-1的情况。#include#include#include#include#includeusing namespace ... 阅读全文
posted @ 2015-08-05 07:57 Fighting_Heart 编辑
摘要:最小费用最大流,因为要控制字典序,网络流控制不好了...一直WA,所以用了费用流,时间早的费用大,时间晚的费用少。构图:建立一个超级源点和超级汇点。超级源点连向1操作,容量为K,费用为COST,然后COST-1,因为下一次遇到1操作,费用为减少1,即COST-1;每个1操作连向当前能建造的城市,容量... 阅读全文
posted @ 2015-08-05 07:51 Fighting_Heart 编辑
摘要:历时好几天,终于完工了!支持无向图四种功能:1.割点的求解2.割边的求解3.点双连通分量的求解4.边双连通分量的求解全部支持重边!!!!全部支持重边!!!!全部支持重边!!!!测试数据:10 111 53 54 52 42 34 66 86 77 88 108 9/*By:ZUFE_ZZT该模板经过... 阅读全文
posted @ 2015-08-03 16:42 Fighting_Heart 编辑
摘要:Tarjan算法求解割点#include#include#include#include#includeusing namespace std;const int maxn=1111;//有多少个结点vectorG[maxn];int visited[maxn];//标记该节点有没有访问过int n... 阅读全文
posted @ 2015-08-03 16:36 Fighting_Heart 编辑
摘要:可以转化成最小割的求解,题目其实就是要求把点分成两个集合,增加一个超级汇点,一部分的点在根节点所在集合内,一部分节点在超级汇点所在的集合内,这两就分开了,又要求费用最小,那么就是最小割。#include#include#include#include#include#include#includeu... 阅读全文
posted @ 2015-08-03 11:49 Fighting_Heart 编辑
摘要:树形DP#include#include#include#include#includeusing namespace std;const int maxn=6666;int Ch[maxn];int dp[maxn][2];int n,u,v,node,tot;vector G[maxn];voi... 阅读全文
posted @ 2015-08-03 10:12 Fighting_Heart 编辑
摘要:二分图的最大匹配。课程和时间可以看做二分图。#include#include#include#includeusing namespace std;const int MAXN=505;int nx,ny;int g[MAXN][MAXN];int cx[MAXN],cy[MAXN];int mk[... 阅读全文
posted @ 2015-08-01 18:43 Fighting_Heart 编辑
摘要:求有几个割点。数据比较水,用了朴素方法。。。30ms。。。#include#include#include#include#includeusing namespace std;char s[1000000];int n,u,v,tot,len,sum;const int INF=0x7FFFFFF... 阅读全文
posted @ 2015-08-01 17:58 Fighting_Heart 编辑
摘要:脑洞题。开个数组记录一下每个点的左边部分的和右边部分的和。只要知道第一个点和最后一个点的情况,其余的点的情况可以再o(n)的效率下推导出来。#include#include#include#includeusing namespace std;const int maxn=10000;long lo... 阅读全文
posted @ 2015-08-01 15:30 Fighting_Heart 编辑
摘要:树状数组+离线操作#include#include#include#includeusing namespace std;int N,M;int SUM1,SUM2,SUM3,SUM4;int C[500000+20];struct Point{ int x,y,PD,ans,id,BiX,B... 阅读全文
posted @ 2015-08-01 15:27 Fighting_Heart 编辑
摘要:二分图的最大匹配地鼠内部和地鼠洞内部都是没有边相连的,那么就可以看成一个二分图。地鼠如果可以跑到那个地鼠洞,就连一条边,然后跑二分图的最大匹配,最后地鼠的数量减去最大匹配数就是答案。#include#include#include#includeusing namespace std;const i... 阅读全文
posted @ 2015-08-01 11:54 Fighting_Heart 编辑
摘要:判断最小生成树是否唯一:先求一遍MST,每次删去MST的一条边,求MST,如果发现有一次求出来的权值之和和一开始的一样,那么就不唯一了。#include#include#include#includeusing namespace std;const int maxn=111;int n,m;str... 阅读全文
posted @ 2015-08-01 10:51 Fighting_Heart 编辑
摘要:答案就是最小生成树中权值最大的边#include#include#include#includeusing namespace std;const int maxn=505;struct Edge{ int from,to,w;} edge[250000+10];int n,ans;int G... 阅读全文
posted @ 2015-08-01 10:14 Fighting_Heart 编辑