摘要:
我用Dinic写的。G++ 1800ms 很慢,c++直接超时。优化后的 141ms,很快! 对于此题,建图方法很巧妙,通常想到求距离,那就会朝距离的方向建图,但是这题根据牛个数来建图,然后二分距离。 先求出任意点之间的最短距离。对于挤奶器,牛,很明显的分为2部分。挤奶器的牛来自牛这部分。先另外设源 阅读全文
摘要:
#include #include #include #define MAXN 1010 using namespace std; int map[MAXN][MAXN],n,dis[MAXN]; int min(int x,int y) {return xq; memset(dis,-1,sizeof(dis)); dis[1]=0; q.push(1); wh... 阅读全文
摘要:
Dinic算法: 层次图:根据源点到该点的距离建图,这里设相邻的都差1。 (下面部分转) 在这幅图中我们首先要增广1->2->4->6,这时可以获得一个容量为2的流,但是如果不建立4->2反向弧的话,则无法进一步增广,最终答案为2,显然是不对的,然而如果建立了反向弧4->2,则第二次能进行1->3- 阅读全文
摘要:
RMQ即求区间(i,j)的最值。通过O(nlogn)处理,O(1)给出答案。 RMQ主要是动态规划来做。dp[i][j]表示从i开始的长为2^j的区间最值。 那么可以得到dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]); dp[i][j],这个区间可以分为 阅读全文
摘要:
对于每次询问的大的值,都是从小的值开始的,那就从小到大处理,省去很多时间,并且秩序遍历一遍m; 这题cin容易超时,scanf明显快很多很多。G++又比C++快; 阅读全文
摘要:
优先队列做,然后遍历人数。 阅读全文
摘要:
先dfs对度小于2的删边,知道不能删为止。 然后通过并查集来计算每一个分量里面几个元素。 阅读全文
摘要:
可以暴力。 阅读全文
摘要:
#include #include #define lson l,m,rty?x:y; } void PushUp(int rt) { sum[rt]=max(sum[rt=r) { return sum[rt]; } int ret=-9999999; int m=(l + r)/2; if(m = R) { ... 阅读全文
摘要:
wa从一点到晚上11点没停过,也不知道为什么错,第二天换了个思路做,终于过了。这题还是有点问题的,数据有点水,我看到有人贴的代码baabbaab这组数据是4 0,明显错的,但是却可以过。 下面的是我第一次写的代码,也不知道到底哪里错了,能想到的样例都过了。 正的直接后缀数组求出即可。反着的我还用he 阅读全文