思路讲解
无向图判环+贪心选择短边,这就是kruskal算法
AC代码
https://vjudge.net/solution/57384651
1 |
|
无向图判环+贪心选择短边,这就是kruskal算法
https://vjudge.net/solution/57384651
1 | #include <iostream> |
P1908 逆序对 的升级版,加了下面这句话
He is allowed to swap two adjacent numbers for no more than k times.
1 | cnt=std::max(cnt-K,0LL); |
那为什么只要加了这句话就AC了呢?交换两个相邻元素就可以消除逆序对?
首先这个逆序对有两种情况,一种是相邻的逆序对,一种是不相邻的逆序对,比如以下这个
2.....1
中间只能填2,所以任何所谓的超距作用其实中间的所有数必然和那个‘1’是逆序对关系,所以所有逆序对关系都可以转化为相邻逆序对关系。
https://vjudge.net/solution/57377152
1 | #include <iostream> |
BIT+频数数组
1 | inline ll query(ll x){ |
https://www.luogu.com.cn/record/197653847
1 | #include <iostream> |
TLE https://www.luogu.com.cn/record/197653726
#include <unordered_map> 这个还是比map要快一点,省了300多ms
答案一定形如跳跳跳到最后一题,然后把剩下的题全做了。
那这个跳到最后一题的过程一定要最小化,所以就是最短路啦
那么要最小化什么那?损失的分数,那么要最小化的就是权,或者说是边权
当然,这个人说的有点瑕疵,起始在跳到最后一题的过程中有两种跳法,一种是跳到B[i],一种是跳到i-1
1 | pq.push({B[s],Dis[s]+A[s]}); |
还有一种思路,用线段树或者树状数组
https://codeforces.com/contest/2024/submission/300344376
1 | #include <iostream> |
这种一定要加一个限制,避免出现负数,0之类的不存在点进入的情况
1 | // 还要考虑往回走的情况 |
https://codeforces.com/contest/2024/submission/300344292
这个MAXDIS设太小了,这种设大一点比较好
1 | const ll MAXN=static_cast<ll>(4e5)+10,MAXDIS=1e17+7; |