随笔分类 -  poj

摘要:带权并查集食物链(模3系),三个物种,给一些关系,同类、被吃、吃。问哪些关系是错的。 同类关系是0,点吃根节点的关系是1,根节点吃点关系是2即可。 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> # 阅读全文
posted @ 2018-09-13 23:04 LMissher 阅读(88) 评论(0) 推荐(0)
摘要:带权并查集模2系,也就是给一些关系 ,这些关系是是否同类。问有多少关系错的。 #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> using namespace std; const int M = 2 阅读全文
posted @ 2018-09-13 23:01 LMissher 阅读(92) 评论(0) 推荐(0)
摘要:有n个数字,不知道具体是多少,给q个信息。 每个信息给一个区间[l,r]。并告诉这个区间的奇数有多少个,问第一个错误的信息是第几个。 可以把每个区间的左端点-1的根看做右端点的根的根,用并查集维护一个到根点的1的个数是奇数还是偶数即可。 注意得离散化。 #include <cstdio> #incl 阅读全文
posted @ 2018-09-11 18:45 LMissher 阅读(141) 评论(0) 推荐(0)
摘要:初始有n堆东西每堆一个物品,有两个操作,第一个把含有第x个物品的那堆物品放到含有第y个物品的那堆物品上。 第二个询问第x个物品下面有多少物品。 用并查集维护一个联通块的size以及每个节点到根节点的距离。 第一个操作的时候size[root[x]]+=size[root[y]]并且y的根节点的距离更 阅读全文
posted @ 2018-09-11 13:07 LMissher 阅读(131) 评论(0) 推荐(0)
摘要:water #include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <vector> using namespace std; const int M = 1007; int f[M],r 阅读全文
posted @ 2018-09-11 10:04 LMissher 阅读(126) 评论(0) 推荐(0)
摘要:每个火车头能拉走连续的k个货箱,三个火车头可以拉的最大货箱重量是多少。 dp[i][j]表示i个火车头在前j个火车头里可以拉的最大货箱重量。 dp+记忆化搜索。 #include <cstdio> #include <cstring> #include <cmath> #include <algor 阅读全文
posted @ 2018-09-11 09:09 LMissher 阅读(129) 评论(0) 推荐(0)
摘要:给定一些字符集,将字符集中的字符从字符串中删除或增加需要一些代价,问构造一个回文串的最小代价。 因为删除与增加本质是相同的,所以只保存代价最小的然后进行字符的删除。 考虑区间转移,然后存下所有区间的最小状态即可。 #include <cstdio> #include <cstring> #inclu 阅读全文
posted @ 2018-09-10 22:07 LMissher 阅读(102) 评论(0) 推荐(0)
摘要:水题,照着给的式子记忆化搜索即可。 #include <iostream> #include <cstdio> #include <cstring> #include <cmath> using namespace std; typedef long long ll; int i,j,k; ll d 阅读全文
posted @ 2018-09-10 17:39 LMissher 阅读(137) 评论(0) 推荐(0)
摘要:求一个点到另一个点的路径中最大的最小边。和poj2253一模一样。 松弛操作改成if(d[v]<min(d[u],w)) d[v]=min(d[u],w); 即可。 也可以用最大生成树树即可。 最大生成树中两点间的那条路径中的最小值必是所有路径中最大的最小值。 阅读全文
posted @ 2018-09-06 17:17 LMissher 阅读(114) 评论(0) 推荐(0)
摘要:求一个点到另一个点的路径中最小的最大边。 松弛操作改成if(d[v]>max(d[u],w)) d[v]=max(d[u],w); 即可。 阅读全文
posted @ 2018-09-06 17:05 LMissher 阅读(102) 评论(0) 推荐(0)
摘要:和hdu5023一样不过询问不同。 #include <cstdio> #include <cstring> #include <algorithm> #include <cmath> #include <iostream> #define lson l,mid,rt<<1 #define rson 阅读全文
posted @ 2018-09-02 19:05 LMissher 阅读(86) 评论(0) 推荐(0)
摘要:给一棵边权树,再给三个操作。第一个把一条边权改为v,第二个将一条链的值取反,第三个求一条链的最大值。 考虑用线段树维护连续区间的最大最小值。区间取反打lazy标记,如果lazy是奇数就取反再把最大最小值交换下放,否则不管,单点更新和区间查询很简单。 最后用树剖更新区间。把边权映射到点权即可。 #in 阅读全文
posted @ 2018-08-27 21:58 LMissher 阅读(148) 评论(0) 推荐(0)
摘要:树链剖分模板题(处理边权) 注意把边权归到点上,在查询的时候注意不要lca点的权值,另外线段树注意如果当两个点在同一条重链且都在lca点时,直接返回。 树状数组最后计算链时不用归到重儿子上,直接减就好。 segment_tree: #include <cstdio> #include <cstrin 阅读全文
posted @ 2018-08-27 16:33 LMissher 阅读(152) 评论(0) 推荐(0)
摘要:题目:裸的Floyd。 代码: #include <cstdio>const int inf=1<<29;int n,m;int a[500];int dp[500][500];void floyd(){ for(int k=1;k<=n;k++) for(int i=1;i<=n;i++) for 阅读全文
posted @ 2017-09-12 13:37 LMissher 阅读(181) 评论(0) 推荐(0)
摘要:题目:给一个矩阵告诉每条边的权,求最小生成树。 题解:建树之后直接用kruskal。 代码: #include <algorithm>#include <iostream>using namespace std;struct node{//每条边的两顶点以及距离 int from; int to; 阅读全文
posted @ 2017-08-21 10:41 LMissher 阅读(187) 评论(0) 推荐(0)
摘要:题目:给n个点,m条加权边。用最大距离连接所有点。 题解:裸的最大生成树。我用的kruskal。 代码: #include <iostream>#include <algorithm>using namespace std;struct node{//每条边的两顶点以及距离 int from; in 阅读全文
posted @ 2017-08-21 10:36 LMissher 阅读(144) 评论(0) 推荐(0)
摘要:题意:有n头牛,有m条连接n头牛的路。有一个牛k,所有牛都需要走到牛k处并返回(去的路与回的路距离不同)。求所有牛都最快回到原地处的最大时间。 题解:做这道题的时候,其实并没有想到官方题解。想的是用Dijkstra求出每个牛去和回的最小路相加的最大值。结果用普通的Dijkstra T了。后面用优先队 阅读全文
posted @ 2017-08-21 10:31 LMissher 阅读(238) 评论(0) 推荐(0)
摘要:题意:网络流的裸题,1为源点,n为汇点,给定每条边的容量,求最大流,用EK算法。 代码: #include <cstdio>#include <queue>#include <algorithm>#include <cstring>#define N 300#define INF 0x7ffffff 阅读全文
posted @ 2017-08-19 16:15 LMissher 阅读(197) 评论(0) 推荐(0)