博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
zoj 3659 并检查集合
阅读量:6265 次
发布时间:2019-06-22

本文共 1312 字,大约阅读时间需要 4 分钟。

http://acm.zju.edu.cn/onlinejudge/showProblem.do?

problemId=4882

现在在牡丹江,明天regional直播比赛,我会在一个月内退休。求祝福

今天做的热身赛非常紧张称号,总是错的字,晚上写写代码练练手

脑子还是不好使。没想到能够并查集

思路:题目中的操作导致的一个结果是,一条边会成为一个集合的w,----  假设能想到这里可能就能想到并查集吧

WA了由于假设father[x]==x并不能表示x中仅仅有一个数啊。

。。

#include 
#include
#include
#include
using namespace std;#define ll long long#define IN(s) freopen(s,"r",stdin)const int MAXN = 200000+200;struct edge{ int u,v,w; bool operator < (const edge &c)const{ return w>c.w; }}e[MAXN*2];int n,fa[MAXN],num[MAXN];ll co[MAXN];int Find(int x){ if(x != fa[x])fa[x]=Find(fa[x]); return fa[x];}void init(){ for(int i=0;i<=n;i++) fa[i]=i,num[i]=1,co[i]=0LL;}void un(int x,int y,int w){ int xf=Find(x); int yf=Find(y); if(xf == yf)return; /*if(xf == x && yf == y && num[xf]==1 && num[yf]==1) { num[xf]+=num[yf]; fa[yf]=xf; co[xf]=(ll)w*num[yf]+co[xf]; return; }*/ ll cosx=(ll)w*num[yf]+co[xf]; ll cosy=(ll)w*num[xf]+co[yf]; if(cosx > cosy) { fa[yf]=xf; num[xf]+=num[yf]; co[xf]=cosx; //co[y]+=w*num[x]; return; } fa[xf]=yf; num[yf]+=num[xf]; co[yf]=cosy;}ll solve(){ init(); for(int i=1;i

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
[LeetCode] Longest Repeating Character Replacement 最长重复字符置换
查看>>
9.5. FAQ
查看>>
Oracle数据库 中的基础的一些语法结构
查看>>
HDU 1213 How Many Tables
查看>>
第 23 章 devel
查看>>
(转) The care and maintenance of your adviser
查看>>
【读书】领导力的5个层次-巅峰
查看>>
【阿里云MVP月度分享】基于PAI平台和Pokemon数据集判断精灵是否为极品精灵
查看>>
第 144 章 Sniffer
查看>>
第 47 章 Apache Tomcat
查看>>
设计模式之禅之设计模式-观察者模式
查看>>
Android 友盟分享躺过的几个坑,大坑,坑爹啊
查看>>
Java解析XML与生成XML文件
查看>>
Head First设计模式之备忘录模式
查看>>
UML九种图
查看>>
AOP的原理和实例
查看>>
通过SQL解读财富的分配(二)
查看>>
复杂SQL性能优化的剖析(一)(r11笔记第36天)
查看>>
19.2. /etc/shells
查看>>
实用的Linux命令行技巧
查看>>