摘要:
非常丰富害怕的一天,第一次打csp-s,感觉有点害怕的,但是考前心态还挺好的。 11.10分出发,1点到达,吃了个午餐(馄饨!),然后再等待,拍了几张照后就进去了,考试楼挺近,但为什么一层就4个考场,然后进场,入座观察,靠窗开心,桌子有点高不太开心,花了10分钟左右做完选择,程序阅读有点傻眼,做了一 阅读全文
摘要:
自从钻研这换根DP,犹如梁山好汉破了难关。初时只觉这树状结构,分枝繁复,变化多端,哪知竟有此等妙计。每换一根,便能高效算出新解,岂不似宋江指挥众兄弟,调度得当,事半功倍。更妙的是,这容斥之法,恰如兵法计策,分而治之,避开冗余。学之愈深,愈觉精妙,心中豪气顿生,恨不得与众学者痛饮一场,论此技之神通。 阅读全文
摘要:
大佬题解 感觉分层图的做法太nb了吧,每次向下连边更新权值,我确实没什么补充的了,还是看大佬的吧。 #include <bits/stdc++.h> using namespace std; #define ll long long const int N=1e7+10; int n,m; int 阅读全文
摘要:
根据题意可知,如果第 \(i\) 只生物是天使那么 \(a_i\) 生物就是恶魔,如果第 \(i\) 只生物是恶魔那么 \(a_i\) 生物就是天使,这时我们就发现这与二分图染色法相同,关于二分图染色法可以看这里。 样例一如下图: 因为这题要求出恶魔数量最多的方案,所以每次选择颜色最多的那个颜色加到 阅读全文
摘要:
P1330 封锁阳光大学 用二分图的构造方式即可,找到两种颜色最小值加起来,注意:图不连通。 #include <bits/stdc++.h> using namespace std; int n,m; int color[10005]; int vis[10005]; int p=0; int x 阅读全文
摘要:
原题链接 好讲解 好代码 匈牙利算法,每次匹配抛弃原有,选择新有。 #include <bits/stdc++.h> using namespace std; int n,m,c; int v[505][505]; int ask[505]; int matched[505]; int ans; i 阅读全文
摘要:
前言 其实 01bfs 就是用队列维护的最短路,在权值只有 \(0\) 和 \(1\) 时就可以把权值为 \(0\) 的方案放到队列最前,权值为 \(1\) 的则放到最后,然后进行搜索,保证高效和正确性。 P4554 小明的游戏 模板题。 大部分 bfs 题都可以用最短路做,而最短路中 dijkst 阅读全文
摘要:
双倍经验:P2024 [NOI2001] 食物链 当问题要求维护一些对立的关系时(朋友、敌人),就可以用种类并查集实现。 因为有三种关系所以并查集的数组要开三倍空间,第一倍空间存同类关系,第二倍存捕食关系,第三倍存被捕食关系。 注意:一的猎物的猎物就是一的天敌,其他就可以直接并查集维护即可。 注意这 阅读全文
摘要:
P4568 [JLOI2011] 飞行路线 考虑跑多层图,每层图连条边权为0的边,跑 dijkstra 即可。 #include <bits/stdc++.h> using namespace std; #define ll long long const int N=1e7+10; int n,m 阅读全文
摘要:
类似最小生成树,对边排序依次加上,但是数据大,要进行离线处理,存起来,将比他小的边加上,判断连通用并查集(路径压缩,按秩合并)。 唐完的我在赛时没写按秩,而且while没写终止条件(唐老鸭)。 先按秩后合并,测评机有点玄学但确实要这样。 初版: #include<bits/stdc++.h> usi 阅读全文
摘要:
P1892 [BOI2003] 团伙 种类并查集!!!! 存敌人 主要要理解敌人的敌人就是朋友这句话,我们就可以用并查集来维护朋友,用一个数组来储存他的其中一个敌人,后面遇到其他他的敌人时,将他的敌人用并查集连起来成为朋友。 注意这题要你输出团队数而不是团队的人数不会就我这么唐吧。 #include 阅读全文
摘要:
四倍经验 51nod 2875 单词游戏 acwing 1185. 单词游戏 洛谷 SPOJ WORDS1 - Play on Words 单词 Play on Words 题意 将 \(n\) 个单词,问能否把这些单词首尾相接的连起来(头尾字母要一样)。 分析 我们可以将每一个字母看成一个节点,这 阅读全文
摘要:
51nod 1720 祖玛 这又是一个区间 dp,但这题又和其他的不一样,这题又用记忆化搜索,但是多学一种方法也没事,但其实用搜索后就模拟即可了。 #include<bits/stdc++.h> using namespace std; // 定义全局变量 int n; // 数组长度 int dp 阅读全文
摘要:
51nod 3180 矩阵连乘 感觉区间 dp 还是要感性理解,但好像区间有套路的,这和石子合并很像,就根据题意模拟。 这个写法的区间比较巧妙,左右同时增加,相当于滑动窗口,因为一开始花费一个是0,所以注意dp的初始化。 #include<bits/stdc++.h> using namespace 阅读全文
摘要:
P1775 石子合并(弱化版) 感觉 dp 太难了,这真的感觉太难学了,但是还要写题记积累啊,唉! 感觉不用讲题意了(那你也别讲题解了)就是石子之间可以合并,合并的代价是这堆石子数,问如何合并全部石子后总代价最小。 考虑用区间 dp,设状态为 \(dp[i][j]\) 为区间 \([i,j]\) 的 阅读全文