摘要:
题意 有一部电梯,最初停在1层。 电梯有4个按键,上升a,b,c层,回到一层。 求从一层出发。能到达1~h的哪些楼层。 (h<=1018,a,b,c<=105) 题解 这种h能大的图论,一眼就知道是同余类。 以模a[1]的余数为下标建立数组,数组的意义是模a[1]为下标的最小的能到达的值。 显然之后 阅读全文
摘要:
题意 题意是给你一张 NMNMNM 的图,每个点有黑色和白色,初始全为白色,每次可以把一个相同颜色的连续区域染色,求最少的染色次数;(n,m<=50) 题解 转化为最短路。对于每一个点与它相邻的相同颜色的点连权值为0的边,对于颜色不同的点连权值为1的点。从每一个点跑单源最短路,把到W点的距离和到B点 阅读全文
摘要:
题意 哇,太长了。 题解 显然,树的直径不唯一但一定相交并且各个·直径的中点汇聚于同一处。 进一步得到一个推论,任意一个直径上求出的偏心距都相等。 原题中(n<=100)我们发现n的范围有点小。直接上暴力。 floyed预处理一下。找到树的直径。 暴力枚举树网的核再暴力枚举偏心距(至于具体怎么枚举看 阅读全文
摘要:
题意 裸的仙人掌直径。 题解 先考虑基环树的直径:先算出每颗“树”的直径,再在环上跑DP 再考虑仙人掌的直径:把每个基环树缩成一条边,边长为基环树深度。 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include< 阅读全文
摘要:
题目大意 给出若干颗树用最少的边把它们连成一个无向连通图,同时使图的直径最小。输出最小直径。 题解 我们定义树的半径为(树的直径+1)/2。符合题意的连接方式为。所有树的“中点”连在直径最长的树的中点上。 此时在判断最长直径即可。注意:有三种情况可以使直径最长。 1 #include<iostrea 阅读全文
摘要:
1 #include<stdio.h> 2 bool ex[4194304],v[4194304]; 3 int a[4194305],n,al; 4 void dfs(int x){ 5 if(v[x])return; 6 v[x]=1; 7 if(ex[x])dfs(al^x); 8 for(i 阅读全文
摘要:
题目描述 一些公司将在Byteland举办商品交易会(or博览会?)。在Byteland有 nnn 个城市,城市间有 mmm 条双向道路。当然,城镇之间两两连通。 Byteland生产的货物有 kkk 种类型,每个城镇只生产一种。 为了举办商品交易会,你必须至少带来 sss 种不同类型的商品。将货物 阅读全文
摘要:
题目描述 RAMESS知道很多关于树的问题(无循环的无向连通图)! 他创建了一个新的有用的树的划分,但他不知道如何构造它,所以他请求你的帮助! 划分是从树上的边中分裂出一些简单的路径,使得每个两条路径都具有至少一个公共顶点。树的每一个边都应该在一条路径上。 帮助RAMESs,找到这样的树的划分,或判 阅读全文
摘要:
题解 用一个矩阵来表示一个图的边的存在性,即矩阵C【i,j】=1表示有一条从i到j的有向边C【i,j】=0表示没有从i到j的边。这个矩阵的k次方后C【i,j】就表示有多少条从i到j恰好经过k条边的路径。 在此题中我们赋予边权值并把矩阵乘法中的+改为min这样这个矩阵的k次方后C【i,j】就表示从i到 阅读全文