传送门 一道比较综合的好题. 由于是求严格的次小生成树. 我们需要维护一条路径上的最小值和次小值. 其中最小值和次小值不能相同. 由于不喜欢倍增我选择了用树链剖分维护. 代码: #include<bits/stdc++.h> #define N 100005 #define M 300005 #define lc (p<<1) #define rc (p<<1|1) #define mid (T[p].l+T[p].r>>1) #define ll long…
时间:2018.09.15地点:北京国华投资大厦…
描述 约翰叔叔希望能够廉价连接他的供水系统,但是他不希望他的竞争对手知道他选择的路线.一般这样的问题需要选择最便宜的方式,所以他决定避免这种情况而采用第二便宜的方式. 现在有W(3 <= W <= 2000)个供水站,其中最多有P(P <=20,000)< span="">条管道,每一条管道连接了两个水站,并且不存在一条管道连接同一个水站,两个水站之间最多只有一条管道.每条管道有一定的费用.请寻找第二便宜的连接方式,使所有的水站相连. 假设最便宜的方案有且…
过了一周,终于迎来了第二次模拟(这不是期待的语气),看第一周毒瘤程度,我就觉得接下来的模拟只能更毒瘤. 花了10多分钟读完了三道题,觉得暴力还是挺好写的,然后在每一道题都思索那么几分钟后,觉得还是写暴力靠谱一些……不过还好,一个半点就把暴力都写完了. 然后我就接着想正解…… T1 game 这道题刚开始就觉得是二维线段树,然后瞟了一眼数据范围:1e6 * 1e6,于是就犹豫了.就一直在想能不能行和列各只开一个线段树,最终反正是没想出来,于是开始优化我的暴力.推了半天发现了一个惊天秘密:就是修改的…
传送门 先考虑什么时候不合法. 第一是考虑任意两个特殊点的权值的奇偶性是否满足条件. 第二是考虑每个点的取值范围是否合法. 如果上述条件都满足的话就可以随便构造出一组解. 代码: #include<bits/stdc++.h> #define N 100005 #define inf 0x3f3f3f3f using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=get…
描述 Ssoier在紧张的学习中,杜老师每天给他们传授精妙的知识. 杜老师为了活跃气氛,设计了一个点名器,这个点名器包含一个长度为M的数组(下标1开始),每个元素是一个oier的名字,每次点名的时候,点名器会等概论随机生成一个1到M的整数,对应的人就要回答问题.当然杜老师有喜欢的人,他会故意让一些名字重复出现以增加某些人被点中的概率. LDX感觉不是很好,他不希望被点中.他找到杜老师,不过杜老师表示他确实喜欢ldx,不过杜老师还是想给ldx一点好处,他被点名器的数组给ldx看,然后让ldx对数组…
跟hdu1599差不多.. 只是需要输出方案. 这个可以递归求解. 代码: #include<iostream> #include<cstdio> #include<cstring> #include<cctype> #define inf 50005 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); w…
传送门 floyd求最小环的板子题目. 就是枚举两个相邻的点求最小环就行了. 代码: #include<bits/stdc++.h> #define inf 0x3f3f3f3f3f3f #define ll long long using namespace std; inline ll read(){ ll ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch))ans=(ans<<…
传送门 貌似可以最短路时同时判定负环啊. 但我不想这样做. 于是写了一个dfs版的判环,bfs版的求最短路. 代码: #include<iostream> #include<cctype> #include<cstdio> #include<cstring> #include<queue> #define N 1005 #define M 1000005 #define inf 0x3f3f3f3f using namespace std; in…
传送门 显然答案等于各个连通分量的笔画数之和. 因此我们dfs每个连通分量计算对答案的贡献. 对于一个连通分量,如果本来就有欧拉回路那么只需要一笔. 否则需要寄点数/2那么多笔才能画完. 知道这个结论这题就很简单了. 代码: #include<bits/stdc++.h> #define N 100005 #define M 200005 using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!i…