题目链接 :https://ac.nowcoder.com/acm/contest/373/C

题意,初始每一个城市都有一伙盗贼,没过一个时刻盗贼就会逃窜到另一个城市,你可以在m个城市设置监察站,会逮捕所有经过该城市的盗贼

分析:仔细分细题目,因为每个城市的盗贼都是流动的,这就可能会形成环,而如果成环的话,在环所在任一城市都可以把这批城市的全部盗贼逮捕,就不需要再环上设多个监察站了,进一步推广,因为可以自己往自己的城市跑,所以也有可能是链,而链也是满足设一个监察站可以逮捕所有

自然想到引入并查集,用map来保存

 #include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+;
const int mod=1e9+;
ll a[maxn],v[maxn];
ll par[maxn];
ll rnk[maxn];
ll c[maxn];
bool cmp(const ll &a,const ll &b){
return a>b;
}
void init(){
for(ll i=;i<maxn;i++) par[i]=i,rnk[i]=;
}
ll find(ll x){
if(par[x]==x){
return x;
}
else{
return par[x]=find(par[x]);
}
}
void unite(ll x,ll y){
x=find(x);y=find(y);
if(x==y) return ;
if(rnk[x]<rnk[y]){
par[x]=y;
}else {
par[y]=x;
if(rnk[x]==rnk[y]) rnk[x]++;
}
}
bool same(ll x,ll y){
return find(x)==find(y);
}
int main(){
ll n,m;scanf("%lld%lld",&n,&m);
init();
for(int i=;i<=n;i++){
scanf("%lld",&a[i]);
}
for(int i=;i<=n;i++){
scanf("%lld",&v[i]);
unite(i,v[i]);
}
map<ll,ll> ans;
map<ll,ll>::iterator ite;
for(ll i=;i<=n;i++){
ans[find(i)]+=a[i];
}
//for(int i=1;i<=n;i++) cout<<find(i)<<" ";
int j=;
for(ite=ans.begin();ite!=ans.end();++ite){
c[j++]=ite->second;
}
sort(c,c+ans.size(),cmp);
ll cnt=;
for(ll i=;i<m&&i<ans.size();i++){
cnt+=c[i];}//cout<<c[i]<<endl;}
cout<<cnt<<endl;
return ;
}

并查集 牛客练习赛41 C抓捕盗窃犯的更多相关文章

  1. 牛客练习赛41 B-666RPG

    题目链接:https://ac.nowcoder.com/acm/contest/373/B 题意:有n个回合,每个回合给1个数,每个回合你有两种选择 1.加上第i个数 2.将当前数乘-1 想知道有多 ...

  2. 【并查集缩点+tarjan无向图求桥】Where are you @牛客练习赛32 D

    目录 [并查集缩点+tarjan无向图求桥]Where are you @牛客练习赛32 D PROBLEM SOLUTION CODE [并查集缩点+tarjan无向图求桥]Where are yo ...

  3. 牛客练习赛28-B(线段树,区间更新)

    牛客练习赛28 - B 传送门 题目 qn姐姐最好了~ ​ qn姐姐给你了一个长度为n的序列还有m次操作让你玩, ​ 1 l r 询问区间[l,r]内的元素和 ​ 2 l r 询问区间[l,r]内的 ...

  4. 牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 逻辑,博弈 B

    牛客练习赛31 B 赞迪卡之声妮莎与奥札奇 https://ac.nowcoder.com/acm/contest/218/B 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 2621 ...

  5. 牛客练习赛31 D 神器大师泰兹瑞与威穆 STL,模拟 A

    牛客练习赛31 D 神器大师泰兹瑞与威穆 https://ac.nowcoder.com/acm/contest/218/D 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 26214 ...

  6. 最小生成树--牛客练习赛43-C

    牛客练习赛43-C 链接: https://ac.nowcoder.com/acm/contest/548/C 来源:牛客网 题目描述 ​ 立华奏是一个刚刚开始学习 OI 的萌新. 最近,实力强大的 ...

  7. 牛客练习赛26:D-xor序列(线性基)

    链接:牛客练习赛26:D-xor序列(线性基) 题意:小a有n个数,他提出了一个很有意思的问题:他想知道对于任意的x, y,能否将x与这n个数中的任意多个数异或任意多次后变为y 题解:线性基 #inc ...

  8. [堆+贪心]牛客练习赛40-B

    传送门:牛客练习赛40 题面: 小A手头有 n 份任务,他可以以任意顺序完成这些任务,只有完成当前的任务后,他才能做下一个任务 第 i 个任务需要花费  x_i 的时间,同时完成第 i 个任务的时间不 ...

  9. 牛客练习赛 29 E 位运算?位运算!(线段树)

    题目链接  牛客练习赛29E 对$20$位分别建立线段树.首先$1$和$2$可以合起来搞(左移右移其实是等效的) 用个lazy标记下.转移的时候加个中间变量. $3$和$4$其实就是区间$01$覆盖操 ...

随机推荐

  1. 比酒量|2012年蓝桥杯B组题解析第三题-fishers

    (5')比酒量 有一群海盗(不多于20人),在船上比拼酒量.过程如下:打开一瓶酒,所有在场的人平分喝下,有几个人倒下了.再打开一瓶酒平分,又有倒下的,再次重复...... 直到开了第4瓶酒,坐着的已经 ...

  2. netty基础

    1,ServerBootstrap  [Bootstrap] 

  3. (zhuan) Using convolutional neural nets to detect facial keypoints tutorial

    Using convolutional neural nets to detect facial keypoints tutorial   this blog from: http://danieln ...

  4. 常用linux,DOS命令——持续更新

    cd 文件夹名 进入某个文件夹 cd ../ 退出该级目录进入上一级 cd ../../ 退出该级目录进入上上级 cd ../../demo 退出该级目录进入上上级的目录 d: 回车 进入d盘 ls ...

  5. Kubernetes工作流之Pods二

    Init Containers This feature has exited beta in 1.6. Init Containers can be specified in the PodSpec ...

  6. -第1章 HTMLCSS方法实现下拉菜单

    中英文的自动换行问题 把下面代码中的 javascript 改成 子菜单1 试试, 如果英文的话宽度会自动撑开, 用中文不会, 而直接转行下来. <ul> <li><a ...

  7. 小程序之从后台取到数据后放入想要的标签list里

    问题:事情是这样的,我有一个标签的功能,but   我怎么吧后台取到的数据放到我想要的标签里呢,而且是那种多个数据自己会加一个标签的内种,效果如下 解决:我们需要用到wx:for   这个东西呢是需要 ...

  8. perl hash array 嵌套 push

    $hash{"A"}=["pp"];想变成:$hash{"A"}=["p","q"];因为 $has ...

  9. P3853 [TJOI2007]路标设置

    传送门 思路: 类似于数列分段的二分查找答案.设目前的 mid 是一个最小的“空旷指数”,那么在 sum 数组(路标数组)里每两个相邻间的路标距离一定要小于等于目前的 mid , 如果大于,那就必须使 ...

  10. Cannot find a valid baseurl for repo: base/7/x86_6 解决方法

    安装centos7后发现不能上网, sudo vi /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT=no改为ONBOOT=yes 然后重启网络服务 ...