传送门

最小生成树菜题。

题意:给出一些有向边,问有向的最小生成树。


思路:先dfsdfsdfs一把所有有用的边都存起来,然后按终点点权为第一关键字,边权为第二关键字给边排序保证最小生成树的合法性,排完之后跑kruskalkruskalkruskal就行了。

代码:

#include<bits/stdc++.h>
#define ri register int
#define fi first
#define se second
using namespace std;
inline int read(){
	int ans=0;
	char ch=getchar();
	while(!isdigit(ch))ch=getchar();
	while(isdigit(ch))ans=(ans<<3)+(ans<<1)+(ch^48),ch=getchar();
	return ans;
}
const int N=2e5+5,M=2e6+5;
typedef long long ll;
typedef pair<int,int> pii;
int n,m,h[N],ans1=0,tot=0,fa[N];
bool vis[N];
vector<pii>e[N];
ll ans2=0;
struct edge{int u,v,w,c;}tt[M];
inline bool cmp(const edge&a,const edge&b){return a.c==b.c?a.w<b.w:a.c>b.c;}
inline int find(int x){return x==fa[x]?x:fa[x]=find(fa[x]);}
void dfs(int p){
	vis[p]=1,++ans1;
	for(ri v,i=0;i<e[p].size();++i){
		tt[++tot]=(edge){p,v,e[p][i].se,h[v=e[p][i].fi]};
		if(vis[v])continue;
		dfs(v);
	}
}
inline void kruskal(){
	sort(tt+1,tt+tot+1,cmp);
	for(ri i=1;i<=n;++i)fa[i]=i;
	for(ri cnt=0,i=1,fx,fy;i<=tot;++i){
		if(cnt==ans1-1)break;
		fx=find(tt[i].u),fy=find(tt[i].v);
		if(fx^fy)fa[fy]=fx,++cnt,ans2+=tt[i].w;
	}
}
int main(){
	n=read(),m=read();
	for(ri i=1;i<=n;++i)h[i]=read();
	for(ri i=1,u,v,w;i<=m;++i){
		u=read(),v=read(),w=read();
		if(h[u]>=h[v])e[u].push_back(pii(v,w));
		if(h[v]>=h[u])e[v].push_back(pii(u,w));
	}
	dfs(1);
	kruskal();
	cout<<ans1<<' '<<ans2;
	return 0;
}

2019.01.17 bzoj2753: [SCOI2012]滑雪与时间胶囊(最小生成树)的更多相关文章

  1. bzoj2753[SCOI2012]滑雪与时间胶囊 最小生成树

    Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 2843  Solved: 993[Submit][Status][Discuss] Descripti ...

  2. BZOJ2753 SCOI2012 滑雪与时间胶囊 【最小生成树】*

    BZOJ2753 SCOI2012 滑雪与时间胶囊 Description a180285非常喜欢滑雪.他来到一座雪山,这里分布着M条供滑行的轨道和N个轨道之间的交点(同时也是景点),而且每个景点都有 ...

  3. Bzoj2753 [SCOI2012]滑雪与时间胶囊

    2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec  Memory Limit: 128 MBSubmit: 2282  Solved: 796 Descriptio ...

  4. BZOJ 2753 [SCOI2012] 滑雪和时间胶囊 最小生成树

    题目链接: 题目 2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec Memory Limit: 128 MB 问题描述 a180285非常喜欢滑雪.他来到一座雪山, ...

  5. bzoj 2753: [SCOI2012]滑雪与时间胶囊 -- 最小生成树

    2753: [SCOI2012]滑雪与时间胶囊 Time Limit: 50 Sec  Memory Limit: 128 MB Description a180285非常喜欢滑雪.他来到一座雪山,这 ...

  6. BZOJ2753 SCOI2012滑雪与时间胶囊(最小生成树)

    首先显然可以把所有能到的点拎出来建个新图,这样第一问也就做好了. 剩下的部分似乎是一个裸的最小树形图.但显然这个东西是没什么学的必要的并且不太能跑过去. 考虑建出来的图有什么性质.可以发现如果没有高度 ...

  7. BZOJ2753 [SCOI2012]滑雪与时间胶囊 【kruskal】

    题目链接 BZOJ2753 题解 完了我连\(kruskal\)裸题都做不出来了.. 题目是求最小树形图,即有向图最小生成树 我们不能直接上\(kruskal\),而要保证先加入前面的点, 所以我们排 ...

  8. [BZOJ2753][SCOI2012]滑雪与时间胶囊(特殊的有向树形图)

    题目:http://www.lydsy.com:808/JudgeOnline/problem.php?id=2753 分析: 第一问:直接BFS扩展知道无法扩展 第二问: 看似就是最小树形图啊= = ...

  9. 2019/01/17 基于windows使用fabric将gitlab的文件远程同步到服务器(git)

    觉得django项目把本地更新push到gitlab,再执行fabric脚本从gitlab更新服务器项目挺方便的,当然从本地直接到服务器就比较灵活. 2019/01/17 基于windows使用fab ...

随机推荐

  1. HDU-2612.Find way .(不同起点不同终点的BFS)

    我要被这个好用的memset气死了...... 真香 #include <cstring> #include <string> int main () { ]; memset( ...

  2. openal支持的通道数和声道数

    alext.h:  #define AL_FORMAT_QUAD8 0x1204 101 #define AL_FORMAT_QUAD16 0x1205 102 #define AL_FORMAT_Q ...

  3. jQuery与js对象互转

    @参考文章 1 jQuery对象转js 亲测有效 var $v=$("#v"); //jQuery对象 ); //js对象 或 var $v =$("#v") ...

  4. 模拟点击事件在alert前不起作用

    本来想在ajax提交前点击一下模态框,直到返回处理之前都显示正在保存,发现如标题的现象,几经折腾没找到解决办法,发现可能是 alert线程阻塞(冒泡)引起的,也没找到解决办法,于是借助第三方插件lay ...

  5. 鼠标移上去触动hover致使div向上移动几个相素(动画transition轻轻的移动)

  6. centos7下apache2.4反向代理

    apache安装目录在/data/apache24,这里就不介绍apache的安装了. 一.反向代理配置 在/data/apache24/conf/extra下创建htttpd-proxy.conf文 ...

  7. 基于.net技术的 Rss 订阅开发

    RSS(Really Simple Syndication,真正简单的连锁)是一种 Web 内容连锁格式.RSS 成为通过 Web 连锁新闻内容的标准格式.刚好我现在vs的环境也是.net,因为在.N ...

  8. python 常库介绍及安装方法

    bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheetahcherrypy:一个WEB frameworkctypes:用来调用动态链接库DBUtils:数 ...

  9. 6.MySQL图形化工具的使用

    6.图形化工具的使用6.1 Mysql Workbench Mysql Workbench是Mysql官方推出的集成图形化工具,替代了之前的图形化管理工具Mysql Administrator和图形化 ...

  10. session是什么

    初识session,跟大家一起学习下 session是什么 首先,我们需要知道session是什么.我们普遍将session称之为会话控制.说实在的,我现在也不清楚session到底算是什么.我个人认 ...