首页 > 其他分享 >Royal Questions题解

Royal Questions题解

时间:2023-08-10 21:24:23浏览次数:44  
标签:return int 题解 Royal fa Questions 公主

题目链接

Royal Questions - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

分析

每个公主会选择两个王子,考虑将每个公主所选择的两个王子连边,边权为该公主的嫁妆

选择该边即为选择该公主

那么结果图是什么呢?

由于每个王子最多只能选择一个公主即每个点最多有1个出边(也可能没有出边)

那么最多有 n 条边

类似 kruskal 将边权由大到小排序,贪心选择即可

与最小生成树算法唯一不同的是每个连通块里可以有一个环

用f数组记录即可

代码

 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 
 4 const int N=200005;
 5 
 6 struct EDGE{
 7 int x,y,w;
 8 }e[N];
 9 int tot=0;
10 bool cmp(EDGE a,EDGE b){return a.w>b.w;}
11 
12 int fa[N];
13 bool f[N];//每个连通块是否有环
14 int find(int x){
15 if(fa[x]==x) return x;
16 else return fa[x]=find(fa[x]);
17 }
18 
19 int main(){
20 int n,m,ans=0;
21 scanf("%d %d", &n, &m);
22 for(int i=1;i<=m;i++){
23 int x,y,z;
24 scanf("%d %d %d", &x, &y, &z);
25 e[++tot]={x,y,z};
26 }
27 sort(e+1,e+m+1,cmp);
28 for(int i=1;i<=n;i++) fa[i]=i;
29 for(int i=1;i<=m;i++){
30 int x=e[i].x,y=e[i].y,w=e[i].w;
31 int p=find(x),q=find(y);
32 if(p==q){
33 if(!f[p]) ans+=w,f[p]=1;//每个连通块最多有一个环
34 continue;
35 }
36 if(f[q]&&f[p]) continue;//若两个连通块都有环则continue
37 fa[p]=q;
38 f[q]|=f[p];//更新是否有环
39 ans+=w;
40 }
41 printf("%d\n", ans);
42 return 0;
43 }

Card Collector - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)类似

标签:return,int,题解,Royal,fa,Questions,公主
From: https://www.cnblogs.com/Idtwtei/p/17621528.html

相关文章

  • 【题解】Educational Codeforces Round 148(CF1832)
    A.NewPalindrome题目描述:给你一个由小写字母组成的回文字符串,问你是否能在重排其之后构造出另一个与原串不同的回文字符串。多测,\(t\le1000,2\le|s|\le50\)题目分析:考虑其实就是前\(\lfloor\frac{n}{2}\rfloor\)个位置存在两种或以上的不同字符,因为这样直接交换对......
  • P2203 Blink 题解
    好像并没有矩阵快速幂的题解,那我来写一篇题目分析对于每两盏灯,只考虑右灯变化,分为四种情况:左灯为\(1\),右灯为\(1\),右灯变为\(0\);左灯为\(0\),右灯为\(0\),右灯不变,为\(0\);左灯为\(1\),右灯为\(0\),右灯变为\(1\);左灯为\(0\),右灯为\(1\),右灯不变,为\(1\);设第\(i\)......
  • P9342 Bitaro's Travel 题解
    模拟赛做到的题,赛后看了Y2hlbnlpa2Fp的题解,感觉没讲清楚,这里做下补充,提供自己的理解。基本思路:对每个\(A_i\)的答案进行预处理,对于每个询问,只需要找到第一个到达的景点即可。那么如何预处理每个点的答案呢?有一条很重要的性质:最多转向\(\log{X}\)次。要证明这个结论,先放......
  • P6879 スタンプラリー 3 题解
    思路前几篇题解都介绍了,这里着重介绍一个状态设计的小技巧。在设计状态时,我们可能会碰到状态数值过大,而dp数组内存的值较小的情况。例如在该题用\(dp_{l,r,t,0/1}\)表示逆时针经过\(l\)个,顺时针经过\(r\)个,已经花费\(t\)秒,所拿到的雕像个数,\(0\)表示当前在左端点,\(1\)......
  • AT_apc001_g Colorful Doors 题解
    模拟赛做到的题,场上写贪心爆栈了qwq首先在首尾加上两个\(1\)表示进出,将两段路中间的间隔作为传送门,恰好有\(2\timesN\)个传送门,根据两段路的经过情况给传送门分类别:00:用\(N\)表示,称为无用点,不到达该点。10:用\(S\)表示,称为起点,需要通过向右走走到一次。01:用\(T\)......
  • 关于Promise的超难面试题解读
    让我来看一下题目,如下所示Promise.resolve().then(()=>{ console.log(0); returnPromise.resolve(4); }).then((res)=>{ console.log(res); }); Promise.resolve().then(()=>{ console.log(1); }).then(()=>{ console.log(2); }).t......
  • 题解 [SDOI2009] Elaxia的路线
    题目链接题意简述:求两条给定起点终点最短路的最长公共路径。首先最长公共路径一定是两条最短路的公共最长链的部分。至少一定在两条最短路上。考虑如何求出一条路径是否包含于一条最短路,只要路径\(x\rightarrowy\)满足:\[dis_{st\rightarrowx}+w_{x\rightarrowy}+dis_{y\r......
  • keepalived 邮件通知无法发送邮件问题解决【亲测有效,没有效果来找我】
    环境keepalivedkeepalived-2.2.7操作系统cenos7安装方式源码编译安装问题最近在安装keepalived高可用服务,环境是安装完了,但是我想要使用邮件通知这个功能,通过网上捞针怎么也不成功,真是绝绝子,折磨我1天多。终于在刚刚得到了解决办法解决在vrrp_instance自定义的名字中添加......
  • iPhone上使用Charles 抓包的配置方法与问题解决方式
    我是在Macos下配置的,其它平台的内容和步骤也差不多。配置方法:(网上很多,大致说下)一、Charles下载:1)官网下载地址:https://www.charlesproxy.com/download/  二、Charles配置代理:1)查看本机IP:help-->LocalIPAddress   2)查看或者设置访问端口:Proxy->ProxySettings三、配置ios手......
  • P9511 『STA - R3』大豆 题解--zhengjun
    妙妙题。题意给定\(F_0(x)=a_{(x-1)\bmodn+1}\)。\[F_k(x)=F_{k-1}(x)-\sum\limits_{i=2}^nF_k(\lfloor\frac{n}{i}\rfloor)\]求\(F_k(m)\)。\(1\len\le10^4,1\lem\le10^{10},1\lek\le3\)。直接数论分块求解的复杂度是\(O(m^{\frac{3}{4}}k)\),难以通过。如果像......