题目整理

图论

*欧拉:

**
OJ
HDU 1878 欧拉回路
题意:
判定途中是否存在欧拉回路
思路:
这是一道裸的不能再裸的题了,直接根据欧拉图的判定来做
判定:当且仅当无向图连通且每个点的度数都是偶数
判定连通时可以用并查集,所有点都可以追溯到同一个根节点
HDU 3018
题意:
N个点M条边,问至少需要多少笔才能画完所有边(一笔画问题变形)
思路:
单点0笔
欧拉图1笔
非欧拉图:(度数是奇数的点的个数/2)笔
解释:度数是奇数的点肯定为偶数个(一笔画两个),可以理解为先把度数为奇数的点连起来(一条边连两个),在连最后两个时顺势走完欧拉路。
POJ 1300
Door Man
题意:
给你N个房间(图节点)以及房间之间的门(图的边),且给你初始的房间号M,问你从初始房间走,可不可以经过每个门仅1次,最后到达0号房间.且所有的门都被你走过1次
思路:
判定是否存在无向图的欧拉回路或通路的问题
1.判断图的连通(有没有孤立的点)
2.判断欧拉回路(所有点度数都是偶数)
3.判断欧拉通路(只有起止点的度是奇数)

洛谷
P2731 骑马修栅栏 Riding the Fences
题意:每一个栅栏连接两个顶点,顶点用1到500标号(虽然有的农场并没有500个顶点)。一个顶点上可连接任意多(>=1)个栅栏。两顶点间可能有多个栅栏。所有栅栏都是连通的(也就是你可以从任意一个栅栏到达另外的所有栅栏)。计算出一条修栅栏的路径,使每个栅栏都恰好被经过一次,输出骑马的路径(用路上依次经过的顶点号码表示)。
思路:Hierholzers算法
详解:https://blog.csdn.net/weixin_43244265/article/details/101625522

BFS:

POJ
POJ 3414
题意:给你两个容量为A和B的空水杯,要你通过3种操作(程序中分为了6种)来实现A或B杯中有一个杯子中的水是C升.
三种操作为:
FILL(i):把i杯子装满水
DROP(i):倒空i杯子的水
POUR(i, j):将i杯子的水倒到j杯子中,只要i杯子为空或j杯子已满就立即停止
要求输出最短操作序列。
思路:一共有六中操作,倒满A,倒满B,倒空A,倒空B,把A到B,把B到A。对这六种状态的操作进行广搜,并记录每个状态之前的状态,根据最后状态输出路径
OJ
HDU 1180
题意:迷宫问题,但有个别路段随着时间改变变换方向
思路:开三维数组,一维用来记录时间(不同的时间同一位置也是不同状态),注意,此题可以原地停留,剩下的就是迷宫问题了
**

最小生成树:

51nod
1212
题意:N个点M条边的无向连通图,每条边有一个权值,求该图的最小生成树
思路:最小生成树模板题,稀疏图kruskal就可以
题解:https://blog.csdn.net/weixin_43244265/article/details/102555890
51nod
1640
题意:N名魔法师按阵法站好,之后选取N - 1条魔法链,每一条魔法链都有一个魔力值V,魔法最终的效果取决于阵中所有魔法链的魔力值的和。求阵中的魔法链的魔力值最大值尽可能的小,与此同时,魔力值之和要尽可能的大。现在给定魔法师人数N,魔法链数目M。求此魔法阵的最大效果。
思路:两遍kruskal
题解:https://blog.csdn.net/weixin_43244265/article/details/102555528

最短路

1443 路径和树
题意:
找出从u开始的最短路径树,并且这个树中所有边的权值之和要最小。
思路:
找最短路径并记录每个点的的最小前驱边,最后把它们加起来并输出。
详解:https://blog.csdn.net/weixin_43244265/article/details/102756612
1444 破坏道路
题意:城市和道路组成的连通图,破坏尽可能多的道路,但是要保证从城市s1到t1不超过l1小时,并且从城市s2到t2不超过l2小时
输出最多可以破坏的道路数目,如果没有解,请输出-1
思路:先求出两两之间的最短路,再尝试经过各个点的最短路,找出两个边之和最少的情况
详解:https://blog.csdn.net/weixin_43244265/article/details/102772365
1445 变色DNA
题意:一个n行n列的字符矩阵,每一行代表一种颜色,如果i行j列字符为Y则说明能从i颜色变道j颜色,如果一行中有多个Y只改变标号小的那个,现在颜色0,你想让其变为颜色N-1,你可以花费1的代价,矩阵中的某一个colormap[i][j]='Y’改变成colormap[i][j]=‘N’。问至少花费多少总代价可以从颜色0经过若干天的变色变成颜色N-1。如果一定不能变成N-1,则输出-1.
思路:一开始没想到最短路,是题目的标题提醒了我,从i到j可以看作一条有向边,要想这条边有效那莫i行的前j-1列就都要是N,如果不是就花费1的代价变为N,所以i到j的边的权值就i是i行前j-1列Y的个数,然后求最短路就可以了。(数据量很小,哪个算法都行)
详解:https://blog.csdn.net/weixin_43244265/article/details/102724796

Tarjan

poj1144
Network(求割点)
题意:n个点的连通图,一个点发生故障可能导致其他点之间不能相互连通,这个点为关键位置,找出图中关键位置的点的个数。
思路:找割点模板题,就是输入有点烦人
详解:https://blog.csdn.net/weixin_43244265/article/details/102882935
UVA796
题意:一个网络中删除一个关键链接会生成两个不相交的子网络,按形式输出这个链接
思路:输出图中所有的桥
详解:https://blog.csdn.net/weixin_43244265/article/details/102925038
HDU1269
题意:n个房间m条通道,通道时单向的,对于任意的i和j,至少存在一条路径可以从房间i到房间j,也存在一条路径可以从房间j到房间i。
思路:强连通分支个数为1,或桥的数为0
详解:https://blog.csdn.net/weixin_43244265/article/details/102925038
POJ-1236
Network of Schools
题意:学校之间收发软件,每所学校都有一份向其分发软件的学校(“接收学校”)的名单,收发时单向的,计算必须接收新软件副本的学校数量,以便该软件能够根据协议到达网络中的所有学校(子任务A);添加最少的边保通过将新软件的副本发送到任意一所学校,该软件将到达网络中的所有学校。
思路:
A:找强联通分量,相同强连通分量之间是可以互通的,不同强联通分量之间有入边的分量可以由其他强联通分量到达,也就是说找入度为0的强联通分量。
B:把每个强联通分量看做一个点(缩点)构成新图,然后使该图强连通-----加边的方法: 要为每个入度为0的点添加入边,为每个出度为0的点添加出边 ,假定有 n 个入度为0的点,m个出度为0的点, max(m,n)就是第二个问题的解(证明难,略)
详解:https://blog.csdn.net/weixin_43244265/article/details/102980822
poj 3352
Road Construction
题意:城市之间修有道路,现在修路,每条路施工的时候不能通行,现在给出以有道路,让你确定最少还要修几条路从才能使修任意一条道路时,仍可使用余下的道路在任何两个旅游景点之间行走
思路:缩点的思想形成新图并添边使新图强连通(找新图度为1的节点的个数sum,添边个数就是(sum+1)/2)
详解:https://blog.csdn.net/weixin_43244265/article/details/102989235
POJ 1515
题意:无向的连通图,让你改为有向连通图,单向边尽可能多(无向边用两个单向边表示)
思路:桥用无向边,其余用单向边,顺序按tarjan的搜索顺序来确定
详解:https://blog.csdn.net/weixin_43244265/article/details/102995456

拓扑

POJ 3553
Task schedule
题意:这个题题意比较难理解,一开始又是处理时间、终止时间,又是最大值的最小值啥的有点晕。题意主要是想让你按照给出的i,j的先后顺序(i在j前)排序,在所有可能的排序中找出每一组超期(实际第几天完成(Cj)-限定第几天完成(Dj))的最大值最小的一组排序。
思路:排序就是简单的拓扑排序,找max{Cj-dj, 0}.最小的一组可以用贪心的思想,把没有固定位置的(没有条件约束的)限定天数小的放在前面
详解:https://blog.csdn.net/weixin_43244265/article/details/103190539

差分约束系统

POJ_2983
Is the Information Reliable?
题意:以P A B X的形式出现的,意味着防御站A是防御站B以北X光年。
呈V-A-B形式,表示防御站A位于防御站B的北部,至少1光年,但具体距离未知。
你的任务是确定情报是否可靠。
思路:由于V-A-B情况下只给了一个范围,由此联想到不等式,进而联想到差分约束,由于P-A-B形式是个确定的值X,就想到X<=A-B<=X,所以:A-B<=X;B-A<=-X。
所以差分判负环就可以了。
详解:https://blog.csdn.net/weixin_43244265/article/details/103246471

2-SAT

HDU3062
题意:有n对夫妻,每对夫妻中只有1人可以列席。在2n 个人中有矛盾的2个人是不会同时出现在聚会上的。有没有可能会有n 个人同时列席?
思路:2-SAT模板题
详解:https://blog.csdn.net/weixin_43244265/article/details/103266511
POJ 3905
Perfect Election
题意:民众投票选举,每个人投两票(可以是某人被选也可以是某人不被选),选举结果使得每个人这两票至少有一票满足,则称选举结果是完美的,先在给出每人的投票情况问是否存在完美的投票结果
思路:2-SAT问题,建边
详解:https://blog.csdn.net/weixin_43244265/article/details/103297102

数论

POJ1013
Counterfeit Dollar
题意:十二枚硬币,一枚假币,一个天平称三次求出假币以及假币比真币重还是轻
思路:每个硬币都用0标记,不平天平的高端都减一,低端都加一,平的两端都是真的设法排除掉,最后比较没有排除的所有的硬币的绝对值,最大的就是假币,如果假币的标记是正的它就比真币重,是负的它就比真币轻。
详解:https://blog.csdn.net/weixin_43244265/article/details/103582555
hdu2588
GCD
题意:给定整数N和M,多少整数X满足1<=X<=N和gcd(X,N)>=M

思路:x和N的最大公因子当x被N整除时是最大的情况,所以若x<M那不可能存在满足条件的x,所以M<=X<=N。当X是N的因子的时候满足gcd(X,N)=X>=M,也满足gcd(kX,N)=X>=M(k是素数,唯一分解定理),要求出满足条件的个数只要求出M<=X<=N条件下能被N整除的数以及它们的素数倍(欧拉函数)
详解:https://blog.csdn.net/weixin_43244265/article/details/104005015
HDU - 1787
GCD Again
题意:给出一个n计算出一个M(0<M<N),并且n和M的最大公约数大于1

思路:就是让求小于n且不与n互质的数的个数。算出小于n且与n互质的数的个数(欧拉函数的值)然后用n减去这个值,注意这里M不能等于n,所以最后结果要减去1.(注意:这里的数据量太大,开不了这么大的数组,所以虽然是多组数据也不能预处理)
详解:https://blog.csdn.net/weixin_43244265/article/details/103996761
HDU - 2654
Become A Hero
题意:
给出下面函数的值
Int Answer(Int n)
{
…Count = 0;
…For (I = 1; I <= n; I++)
…{
…If (LCM(I, n) < n * I)
…Count++;
…}
…Return Count;
}
i与n的最小公倍数比他两个的乘积小说明i与n不互质,也就是说让求小于等于n的与n不互质的数的个数。

思路:可以用欧拉函数求出小于n的与n互质的数的个数,然后用n减去这个数

详解:https://blog.csdn.net/weixin_43244265/article/details/104005565
HDU - 2824
The Euler function
题意:求n到m的欧拉函数的值的和

思路:欧拉函数预处理然后遍历相加
详解:https://blog.csdn.net/weixin_43244265/article/details/104005793
HDU - 3307
Description has only two Sentences
题意:
a n = X*a n-1 + Y and Y mod (X-1) = 0
给出X,Y,a0,计算最小正整数k,即ak mod a0 =0。

思路:
式子化简后得到a n=X ^ na0 + ((x^n -1)/(1-x))Y
因为Y mod (X-1) = 0
所以可假设Y =c * (X-1)
带入上式得到:
a n=X ^ na0 + ((x^n -1)/(1-x))(c * (X-1) )
a n=X ^ n*a0 + (x^n -1) * c
由此可以看出要想使an%a0==0则 (x^n -1) * c%a0 ==0
所以可以先去掉c因子中a0的因子(a0/gcd(a0,c)),然后可以写成x^n=1(mod a0),所以当n等于a0的欧拉函数值的时候式子一定成立(x与a0互质)(欧拉定理),然后就遍历1<=n<<φ(a0)求最小的n。
详解:https://blog.csdn.net/weixin_43244265/article/details/104006444
HDU - 1796
How many integers can you find
题意:给出一个集合{}和一个数N,求出元素都小于N的能整除给出集合中的一个数的集合元素的个数

思路:容斥,去重,加标记
详解:https://blog.csdn.net/weixin_43244265/article/details/104006629

fzu 1752
题意:给出三个数a,b,c求a的b次方对c取模的结果

思路:b很大,用欧拉降幂
详解:https://blog.csdn.net/weixin_43244265/article/details/104100118

Codeforces 347C
Alice and Bob
题意:现给出一个集合,Alice和Bob每人依次拿出两个数,要求这两个数差的绝对值不在这个集合中,并把两个数差的绝对值加入这个集合,谁先取不到这两个数谁就输了,Alice先拿。

思路:根据题意容易看出最后的序列一定是个等差数列,而且数列的第一个数一定为这个数列的公差(我们知道公差一定会在这个数列当中,如果存在比公差小的数那么公差减去这个数一定比公差小,与公差的定义矛盾),最大的数一定是原始集合中最大的一个,只要我们求出最小与最大数之间等差数列的项数减去原始集合中项的个数就是要添加的个数,判断这个数的奇偶性就能知道到底是谁赢了。所以我们要求出这个公差,我们知道原集合中所有的数都是这个公差的倍数,所以这个公差就是原集合的最大公因子。(之所以是最大公因子是因为其他公因子会引进无关项)
详解:https://blog.csdn.net/weixin_43244265/article/details/104091837

Fast Fourier Transform Gym
题意:给i出两个数的最大公因子g和两个数的和s求出这两个数

思路:因为g是这两个数的最大公因子所以这两个数都能整除g,又因为s是这两个数的和所以s一定能整除g(可以当作有无解的判定条件),所以s-g>0也一定能整除g,所以g与s-g符合条件是一组正解。
详解:https://blog.csdn.net/weixin_43244265/article/details/104128207

CodeForces75 C.
Modified GCD
题意:给你两个数和一个区间让你求这两个数在这个区间上的最大公约数

思路:求出两个数的最大公约数,并预处理取出他们的因子,寻找符合区间的最大的因子(注意去掉不存在的情况)
详解:https://blog.csdn.net/weixin_43244265/article/details/104128101

HDU 1299
Diophantus of Alexandria
题意:给出一个n,问1 / x + 1 / y = 1 / n where x, y, n ∈ N+ (1)有几组解

思路:
原式化简:
xy=n*(x+y)
xy-nx-ny=0;
两边同时加上n^2
n^2+xy-nx-ny= n ^2
(n-x)(n-y)=n^2
所以结果就是求n^2的因子数
有唯一存在定理知道
因子数是(1+e1)(1+e2)(1+e3)…(1+er)
这里是nn
所以因子数就是ans=(1+2e1)(1+2e2)…(1+2*er)
还要注意,这里要求了x>=y(所以最后还要除以2)
还有,当n是质数时公式乘以3
详解:https://blog.csdn.net/weixin_43244265/article/details/104150156

UVA 10515
Powers Et Al
题意:给你两个数m,n,让你求m的n次方的最后一位是多少

思路:最后一位只与m的个位相关,又因为0到9的次幂是循环的,找出它们的循环体,然后用n对循环题的长度取余就行(注意,这里n与m太大存不下,要开字符数组或字符串)

详解:https://blog.csdn.net/weixin_43244265/article/details/104225035

POJ 1320
Street Numbers
题意:一条街道上有n户人家,按顺序编号,程序员家编号为m,他向左走到头和向右走到头的编号和相等,求前十个m,n,按规定格式输出

思路:
1到m-1和m+1到n分别为两个等差序列,它两个的和相等化简后得
2m^2= n ^2+n;
配方得:8m^2 = (2n+1) ^2-1;
移项得: (2n+1) ^ 2+8 m^2 =1;
由此看出是佩尔方程,x1=3,y1=1;
详解:https://blog.csdn.net/weixin_43244265/article/details/104210338

UVA 10236
The Fibonacci Primes

题意:给出一个数n,求出第n个素斐波那契数

思路:
定理:若n为素数则f(n)为素数
所以先打素数表,第n个素斐波那契数就是第n个素数的斐波那契数,预处理斐波那契数(注意保留位数)然后查下标

详解:https://blog.csdn.net/weixin_43244265/article/details/104395722

UVA 1404
Prime k-tuple

题意:给出一个区间a,b和k,s,求区间内有k个相邻素数元素且pk-p1=s的区间个数

思路:数太大,二重筛找素数;

详解:https://blog.csdn.net/weixin_43244265/article/details/104396647

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值