自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

H煊的博客

好困

  • 博客(217)
  • 收藏
  • 关注

原创 拓扑排序

int indegree[100];queue<int> q;int n,m;bool map[100][100];int a[100];int topo(int n){ int cnt = 1; while(!q.empty()) q.pop(); for(int i = 1; i <= n ; i++) if...

2018-05-24 18:17:43 329

原创 青蛙的约会(poj 1061)

青蛙的约会假设:跳x1次后相遇,相遇时路乘差是y1*l(跳了y1圈)列出方程:x+m*x1-(y+n*x1)=y1*l ;化简为(n-m)*x1+y1*l=x-y ;代码:#include<iostream>#include<cstdio>using namespace std; long long exgcd(long long a,long long b,lon...

2018-05-16 17:30:18 861

原创 Romantic(hdu 2669)

Romantic扩展欧几里德算法。先用扩展欧几里德算法求出x,y然后再判断x是否大于0,如果小于0,则通过循环+b,直到x>0,在输出答案.代码:#include<iostream>#include<cstdio>using namespace std; long long exgcd(long long a,long long b,long long&amp...

2018-05-16 15:50:08 248

原创 欧拉路,回路

判定:   欧拉路:       有向图:图连通,有一点入度>出度,有一点出度>入度,其余点入度=出度或入度=出度;Play on Words       无向图:图连通,零个或两个奇数度,其余偶数度;一笔画问题   欧拉回路:       有向图:图连通,入度=出度;       无向图:图连通,零个奇数度;John's trip  ...

2018-05-16 15:42:15 157

原创 Watchcow(poj 2230)

Watchcow求无向图每条边恰好经过两次,在回到原点,输出经过的顶点。容易转化为有向图欧拉回路每条边经过一次。代码:#include <stdio.h>#include <stack>#include <vector>#include <iostream>using namespace std;#define M 100005str...

2018-05-15 22:16:03 542 2

原创 John's trip(poj 1041)

John's trip题目大意: 给出无向图,每条边有唯一的序号,是否存在欧拉回路,若存在输出边序号最小字典序的路径。下面代码没有判断图连通,根据题意图应该联通了,只需判断零个奇数点就可以了。代码:#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>...

2018-05-15 21:16:54 208

原创 Play on Words

Play on Words题意就是给你n个由小写字母构成的字符串,问你能不能将这n个字符串连接起来,B能接在A后面的条件是A的最后一个字母==B的第一个字母。然后就是将26个小写字母看成顶点集,对于一个字符串,其首字母向尾字母连一条单向边构图,所以本题就是有向图的欧拉路问题。代码:#include<cstdio>#include<vector>#include<c...

2018-05-15 20:22:58 166

原创 Ant Trip(HDU 3018)

Ant Trip一笔画问题,无向图欧拉路或者欧拉回路,注意题目说了,如果是孤立点,则不用考虑。对于每个连通块,如果全都是偶数度(欧拉回路),则需要1笔;如果不是,则需要奇数度顶点个数的1/2笔。代码:#include<bits/stdc++.h> using namespace std; int par[100005]; struct node { int du...

2018-05-15 12:27:20 196

原创 一笔画问题(nyoj 42)

一笔画问题对于无向图G,具有一条欧拉路(一笔画),当且仅当G是连通的,且有零个或两个奇数度结点。代码:#include<bits/stdc++.h> using namespace std; int par[1001]; int G[1001]; void init(int n) { for(int i=1;i<=n;i++) ...

2018-05-15 10:51:55 322

原创 战舰萝莉

1164 - 战舰萝莉#include using namespace std;const int maxn=111111; int add[maxn<<2],sum[maxn<<2];int a[maxn];int ans=0;int op,l,r,x,k,n,m;#define lson (rt<<1)#define rson (rt<<1|1)void

2017-12-23 12:19:05 348

原创 2017 ACM/ICPC Asia Regional Qingdao Online 1009(最大流Dinic算法)

Smallest Minimum Cut题意:求最小割边数。给权值hash一下即可。使用最大流的Dinic算法,时间复杂度O(m*n^2)。代码:#include using namespace std;const int max_v=202;const long long INF=1ll << 60;const int MOD=100000;int

2017-09-20 21:41:04 214

原创 最大流之Dinic算法

之前简单介绍了最大流之Ford-Fulkerson算法,此算法时间复杂度为O(F*E)。大多数情况下,这个算法已经足够高效了,但当顶点数或最大流流量非常大时,这个算法就显得不够快了。下面简单介绍易实现的Dinic算法。Ford_Fulkerson算法通过深度优先搜索寻找增广路,并沿着它增广。与之相对,Dinic算法总是寻找最短的增广路,并沿着它增广。时间复杂度O(E*V^2),不过。该算法在实

2017-09-20 21:00:05 550

原创 2017 ACM/ICPC Asia Regional Qingdao Online 1011(数学知识)

A Cubic number and A Cubic Number题意:判断一个素数是否是两个立方数之差。x^3-y^3=(x-y)(x^2+xy+y^2),观察(x-y),可以知道只有相邻的立方数之差才可能是素数。代码:#include using namespace std;long long a[800001]; int main(){ fo

2017-09-18 22:01:13 360

原创 HDU 4336 Card Collector(容斥)

Card Collector模板题。代码:#include using namespace std;const int max_n=10100; int n;double p[max_n],ans;void dfs(int x, int tot, double sum)//容斥原理dfs(1,0,0.0) { if (x==n+1) {

2017-09-16 11:12:33 319

原创 POJ 2481 Cows(树状数组)

Cows题意:对于每头牛,吃草的区间在li,ri之间,问在n头牛中,对于第i头牛而言,有几头牛的区间大于这头牛。先按ri排序(固定一个方向),再用树状数组对li即可。代码:#include #include #include using namespace std;const int max_n=1e5+5; struct node { int

2017-09-16 10:43:09 306

原创 2016 ACM/ICPC Asia Regional Qingdao Online 1003(AC自动机)

Family View题意:给出一系列的敏感词,如果下面文本以敏感词作为子串,那么输出'*'。代码:#include using namespace std;const int MAXN = 1000000+100;char str[MAXN];int pos[MAXN];struct Aho_Corasick{ const static int maxn

2017-09-15 21:56:00 246

原创 AC自动机

ac自动机是kmp的高级版,实现多模式串匹配。代码:struct AC{ int next[500005][26], fail[500005], word[500005], Q[500005]; int root, tol; int newNode(){ for(int i = 0; i < 26; i++) next[t

2017-09-15 21:07:13 465

原创 tarjan算法浅谈

1.求割点: 割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点。 原理:若low[v]>=dfn[u],则u为割点。因low[v]>=dfn[u],则说明v通过子孙无法到达u的祖先。那么对于原图,去掉u后,必然会分成两个子图。 所以处理节点u时,先递归v的子节点,然后回溯至u时,如果满足low[v]>=dfn[u],则u为割点。代码:int dfn[maxn], lo

2017-09-15 18:15:42 333

原创 2015 ACM-ICPC Asia Regional Shenyang Bazinga(KMP+剪枝)

Bazinga题意:找到最大的i(1≤i≤n),存在一个整数j(1≤jj不是si的子串,若不存在,输出“-1”。首先想到直接暴力枚举+KMP,时间复杂度O(50*500*500*(500+500)),显然超时。接下来考虑适当剪枝,可以考虑相邻的字符串编号小的串是不是编号大的串的子串,若是显然这个字符串后续就无需比较了,因为只要包含编号大的串的串,必定能够包含这个编号小的串。

2017-09-14 22:03:00 203

原创 ACM-ICPC Asia Regional Changchun 1008 Sequence I(KMP)

Sequence I题意:已知序列A和序列B以及p,问有多少个位置q,使得b1,b2,…,bm与恰好匹配。KMP算法稍作修改即可,next数组部分是不需要修改的,只需要改一下匹配过程,当序列A中的a[i]等于序列B中的b[j]时,将原先的i++改为i+=p即可。代码:#include using namespace std;const in

2017-09-14 21:35:26 209

转载 卡特兰数(Catalan)

本文转载http://m.blog.csdn.net/mobius_strip/article/details/39229895也可参见百度百科一、介绍        卡塔兰数是组合数学中一个常在各种计数问题中出现的数列。以比利时的数学家欧仁·查理·卡塔兰(1814–1894)命名。        历史上,清代数学家明安图(1692年-1763年)在

2017-09-14 21:05:25 841

原创 HDU 1018 Big Number(数学知识)

Big Number题意:n!的结果由多少位组成。假设10^x近似n!,则x=lg(n!),展开x=lg(n)+lg(n-1)+lg(n-2)+...+lg1。代码:#include #include double solve(int n) { double cnt=0; for(int i=2;i<=n;i++)

2017-09-14 20:52:57 163

原创 2017 百度之星 复赛 Valley Numer(数位dp)

Valley Numer数位dp,state标志前面若干位是否存在递增序列。代码:#include using namespace std;typedef long long ll ;const int max_n=105;const int mod = 1000000007;ll n;ll dp[max_n][13][2], a[max_n];stri

2017-09-13 22:43:46 430

原创 HDU 2089 不要62(数位dp)

不要62数位不能有4和62,没有4的话在枚举的时候判断一下,而对于62的话,涉及到两位,当前一位是6或者不是6这两种不同情况我们计数是不相同的,所以要用状态来记录不同的方案数。dp[pos][state]表示当前第pos位,前一位是否是6的状态,这里state只需要0和1两种状态就可以了。代码:#include using namespace std; type

2017-09-13 21:27:53 176

原创 蓝桥杯 K好数(dp)

K好数思路:动态规划即可。状态:dp[i][j]:=表示第i位以j结尾的K好数。状态转移方程:dp[i][j]=∑dp[i-1][p](p!=j-1&&p!=j+1)(相邻两位不能是相邻的数字)。代码:#include#include# define MOD 1000000007long long f[101][100000];long long K(

2017-09-13 20:59:01 307

原创 The 36th ACM/ICPC Asia Regional Shanghai Site 4016(dfs+剪枝)

Magic Bitwise And Operation题意:n个数字取出k个数字进行“与”操作,求最少的结果。思路:首先明白“与”操作的结果,显然应先将数字排列,小的先取必然最优。下面dfs+剪枝即可,剪枝:1. dfs路径上不断更新ans,不用等搜到底,“与“”操作只会越来越小;2.  与后缀“与”如果没有ans小就剪枝;代码:#include

2017-09-13 16:04:46 203

原创 Codeforces 663C Graph Coloring(图染色dfs)

题意:给出一张图,每条边都有一个颜色(要么是红色要么是蓝色),如果翻转一个顶点,那么这个顶点相邻的边都会变色(红变蓝,蓝变红),求使得整个图变成同色的最小操作数,并且输出要翻转哪些顶点。思路:最小操作数一定是全部变成红色和全部变成蓝色操作数的最小值,我们以全部变成红色举例:如果一条边是红色,那么这条边的两个顶点必然是:要么同时不翻转要么同时翻转,如果一条边是蓝色,那么这条边的两

2017-09-13 15:28:37 405

原创 FZU 2181 快来买肉松饼(dfs)

快来买肉松饼题意:给出n个人, 要从他们中选出奇数个人(人数 >= k)围成圈,,接着给出m对敌对关系, 敌对关系的人不能相邻,,问能不能选出奇数个人构成圈.。思路:将可以相邻的人建边,,那么就是对次图找一个奇数环, 同时奇数环的点数>=k.。dfs一下即可。代码:#include #include #include using namespace std;

2017-09-12 22:38:45 261

原创 2016 ACM-ICPC Asia Regional Changchun 1006 Harmonic Value Description(逻辑思维)

Harmonic Value Description题意:1~n的全排列中谐波值严格第k小的排列为多少,排列p1,p2,…,pn的谐波值定义为:由于p1,p2,…,pn是1~n全排列中的一种,可想而知的是,严格第1小的排列必定是那种任意相邻两个数最大公约数为1的排列。例如排列1,2,3,…,n。此外,1~n这n个数还是很奇妙的,我们可以构造出任意约数为k的对。当然,

2017-09-12 22:22:42 152

原创 2016 ACM-ICPC Asia Regional Changchun 1004 Triangle(打表)

Triangle题意:长度为1,2,3,…,n的n根木棒,问至少偷走几根木棒,才能使得剩下的木棒任意三根都无法组成三角形。找规律,发现剩下的木棍为斐波拉契数列。然后,n代码:#include const int max_n=21;int s[max_n]={0,0,0,0,1,1,2,3,3,4,5,6,7,7,8,9,10,11,12,13,14};in

2017-09-12 22:00:21 274

原创 2016 ACM-ICPC Asia Regional Changchun 1002 Fraction(模拟)

Fraction直接模拟即可,注意结果为分数;代码:#include using namespace std;const int N = 10;int a[N],b[N];int gcd(int a,int b){ if(b==0) return a; return gcd(b,a%b);}int main(){ int

2017-09-12 21:50:04 225

原创 2016 ACM-ICPC Asia Regional E – Similarity of Subtrees(dfs+hash)

E – Similarity of Subtrees题意:输入一棵由n个点和n-1条边构成的树,求这个树中两棵相似的子树有多少对? 相似的子树:要求在相同的深度,两颗子树的在这一层的节点数相同。思路:代码:#include using namespace std;#define ULL unsigned long long#defin

2017-09-12 20:59:45 192

原创 2016 ACM-ICPC Asia Regional B – Help the Princess!(bfs)

B – Help the Princess!一个n * m的地图,有个若干坏蛋和主角,主角需要到达出口才能得救,主角和坏蛋每秒都可以选择往四周走或者停留不动,求主角是否存在一条路径到达出口,这条路径无论坏蛋怎么走都无法阻断!思路:先用坏蛋去bfs出到每个位置的最小时间,然后在bfs主角,主角所走的每步的时间都需要代码:#include using

2017-09-12 20:40:39 213

原创 2016 ACM-ICPC Asia Regional A – Best Matched Pair(打表)

A – Best Matched Pair给出n个数字,任意两个数字可以乘积,求乘积最大并且乘积结果是连续递增的数字的一个解。例如1234是连续递增的数字,但135不是。思路:将所有连续递增的数打表,再暴力匹配即可。时间复杂度O(n^2)。代码:#include using namespace std;typedef long long

2017-09-12 20:32:06 200

原创 POJ 3600 Subimage Recognition(dfs)

Subimage Recognition题意:r*c的01格子1,和R*C的01个格子2( 思路:暴力枚举删除某些列,然后观察是否完全匹配即可;代码:#include #include #include using namespace std;char mp1[25][25], mp2[25][25];int a[25];int r, c, R

2017-09-11 22:18:39 216

原创 2012 ACM/ICPC 长春赛区网络赛 1006(dfs)

LianLianKan题意:问每次都从顶部元素向下消去距离小于6的相同元素能否消完全部元素。代码:#include#include#includeusing namespace std;const int MAXN=1010;int a[MAXN];bool used[MAXN];int dfs(int n){ while(n>0&&used

2017-09-11 21:30:41 235

原创 虚树

虚树

2017-09-11 20:52:24 204

原创 2016 ACM/ICPC 青岛网赛 1001(预处理+二分)

I Count Two Three题意:求2^a*3^b*5^c*7^d>n的值,其中a,b,c,d均为非负整数。我们可以先把能用2^a*3^b*5^c*7^d表示的数打表,,然后二分即可。n的最大值为10^9,估算一下数组开到6000即可。代码:#include #include #include using namespace std;cons

2017-09-10 21:40:04 223

原创 POJ 1321 棋盘问题(dfs)

棋盘问题Time Limit: 1000MS Memory Limit: 10000KTotal Submissions: 50481 Accepted: 24459Description在一个给定形状的棋盘(形状可能是不规则的)上面摆放棋子,棋子没有区别。要求摆放时任意的两个棋子不能放在棋盘中的同一行或者同一列,请编

2017-09-10 20:54:31 139

原创 “玲珑杯” 线上赛 Round #5 Variance(线段树)

1063 -- Variance线段树:1.单点更新   2.区间方差 *(r-l+1)^2ps:方差:Var[x]=E[x^2]-E[x]^2代码:#include using namespace std;#define LL long long const int maxn=2<<18; LL a[maxn]; LL sum[maxn];

2017-09-10 17:56:37 196

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除