HDU 4313 Matrix
水题:在一个双连通的树上有一些点很有破坏性,我们要把这些带破环性的点隔开,就是破坏一些边使这些点之间不连通,破坏一条边需要一点时间,问最少需要多少时间(同一时间只能破坏一个地方,且忽略位置转移的时间);
首先我们应注意到这是一棵树!俩个点之间的通路是位唯一的:
解法:我们从大边开始枚举如果这条边 的左边和右边 都“连接”一个破坏点(俩个点的通路上除了这个边都被枚举过了);那么这个边在这个链上是最小的! 对于只有俩个破坏点的无疑是最优解;
但当多了一些点呢??对于这个链没有交集的无疑不用考虑,对于有交集的另一个链选取的这个边要也在另一条链上才会有影响!而如果在另一条链上无疑也破坏了另一个关系,(虽然这个边在另一条链上不一定是最小的,但这个边对于原来的点对是必须的也是最小的,而且破坏了另一个,所以是最优的,一箭多雕)。
具体实现:
这个题的做法无疑缩点大法:并查集!对吧?
#include <cstring>
#include <algorithm>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <iostream>
typedef long long LL;
using namespace std;
const int INF=0x7fffffff;
struct info
{
int x,y,dis;
bool operator < (const info & rht )const
{
return dis>rht.dis;
}
}ko[100005];
bool flag[100005];
int fa[100005];
int n,k;
void inint()
{
memset(flag,false,sizeof(flag));
for(int i=0;i<n;i++)
fa[i]=i;
}
int Find(int x)
{
return x==fa[x]? x: fa[x]=Find(fa[x]);
}
void Union(int x,int y)
{
fa[x]=y;
}
int main()
{
int t,tmp;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&k);
inint();
for(int i=0;i<n-1;i++)
scanf("%d%d%d",&ko[i].x,&ko[i].y,&ko[i].dis);
sort(ko,ko+n-1);
for(int i=0;i<k;i++)
{
scanf("%d",&tmp);
flag[tmp]=true;
}
LL ans=0;
for(int i=0;i<n-1;i++)
{
int fa=Find(ko[i].x);
int fb=Find(ko[i].y);
if(flag[fa]&&flag[fb])
ans+=ko[i].dis;
else if(flag[fa])
Union(fb,fa);
else if(flag[fb])
Union(fa,fb);
else
Union(fa,fb);
}
cout<<ans<<endl;
}
}
HDU 4313 Matrix的更多相关文章
- HDU 4313 Matrix(并查集)
http://acm.hdu.edu.cn/showproblem.php?pid=4313 题意: 给出一棵树,每条边都有权值,其中有几个点是特殊点,现在破坏边还使得这几个特殊点互相不可达,需要使得 ...
- HDU 4313 Matrix 树形dp
题意: 给定n个点的树,m个黑点 以下n-1行给出边和删除这条边的费用 以下m个黑点的点标[0,n-1] 删除一些边使得随意2个黑点都不连通. 问删除的最小花费. 思路: 树形dp 每一个点有2个状态 ...
- HDU 4920 Matrix multiplication(bitset)
HDU 4920 Matrix multiplication 题目链接 题意:给定两个矩阵,求这两个矩阵相乘mod 3 思路:没什么好的想法,就把0的位置不考虑.结果就过了.然后看了官方题解,上面是用 ...
- HDU 2686 Matrix 3376 Matrix Again(费用流)
HDU 2686 Matrix 题目链接 3376 Matrix Again 题目链接 题意:这两题是一样的,仅仅是数据范围不一样,都是一个矩阵,从左上角走到右下角在从右下角走到左上角能得到最大价值 ...
- hdu 2686 Matrix 最小费用最大流
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 Yifenfei very like play a number game in the n*n ...
- hdu 5569 matrix dp
matrix Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5569 D ...
- hdu 2119 Matrix(二分匹配)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2119 Matrix Time Limit: 5000/1000 MS (Java/Others) ...
- HDU 5671 Matrix 水题
Matrix 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5671 Description There is a matrix M that has ...
- HDU - 233 Matrix
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5015 解题思路:一看到题目,感觉是杨辉三角形,然后用组合数学做,不过没想出来怎么做,后来看数据+递推思 ...
随机推荐
- Storm集群中执行的各种组件及其并行
一.Storm中执行的组件 我们知道,Storm的强大之处就是能够非常easy地在集群中横向拓展它的计算能力,它会把整个运算过程切割成多个独立的tasks在集群中进行并行计算.在Storm中 ...
- 斯坦福ML公开课笔记15—隐含语义索引、神秘值分解、独立成分分析
斯坦福ML公开课笔记15 我们在上一篇笔记中讲到了PCA(主成分分析). PCA是一种直接的降维方法.通过求解特征值与特征向量,并选取特征值较大的一些特征向量来达到降维的效果. 本文继续PCA的话题, ...
- Routing 服务
WCF Routing 服务 WCF4.0支持路由机制,通过RoutingService实现请求分发.拦截处理. 一.应用场景 1.暴露一个endpoint在外网,其余服务部署于内网: 2.请求分发, ...
- 在RHEL上安装Thrift(支持C++)的若干问题 » 编码无悔 / Intent & Focused
在RHEL上安装Thrift(支持C++)的若干问题 » 编码无悔 / Intent & Focused [原创]在RHEL上安装Thrift(支持C++)的若干问题 2010年12月1 ...
- ssh 即使主机,同nohup背景脚本
下面的脚本工具:先从本地副本的脚本到远程主机,然后ssh即使在远程主机,脚本的运行副本前(因为脚本需要运行很长,它运行在后台),该脚本仅用于备忘录,如果请指点不足! #!/bin/bash cd /t ...
- COST CUTTING THE ALAN GREENBERG WAY
AnatBird.com COST CUTTING THE ALAN GREENBERG WAY
- Python的控制结构(转)
首先我的工作第一语言是c/c++(面向对象子集).选择学习python一方面是因为看很多人都说python开发效率高,所以想验证一下:另一方面,Eric S. Raymond在文章:如何成为一名黑客 ...
- poj2486(树形dp)
题目链接:http://poj.org/problem?id=2486 题意:一颗树,n个点(1-n),n-1条边,每个点上有一个权值,求从1出发,走m步,最多能遍历到的权值. 分析:非常不错的树形d ...
- Flash Android ANE打包之基本流程
搭建环境这里就不详细说明了 一.Android本地库编写 1.从Flash Air SDK中提取需要的jar包 Android下需要的jar包在Flash Air SDK/lib/android目录下 ...
- JAVA的class打包成dll
一.将已经编译后的java中Class文件进行打包:打包命令JAR 如:将某目录下的所有class文件夹全部进行打包处理: 使用的命令:jar cvf test.jar -C com/ . //注意这 ...