水题:在一个双连通的树上有一些点很有破坏性,我们要把这些带破环性的点隔开,就是破坏一些边使这些点之间不连通,破坏一条边需要一点时间,问最少需要多少时间(同一时间只能破坏一个地方,且忽略位置转移的时间);

  首先我们应注意到这是一棵树!俩个点之间的通路是位唯一的:

  解法:我们从大边开始枚举如果这条边 的左边和右边 都“连接”一个破坏点(俩个点的通路上除了这个边都被枚举过了);那么这个边在这个链上是最小的!  对于只有俩个破坏点的无疑是最优解;

  但当多了一些点呢??对于这个链没有交集的无疑不用考虑,对于有交集的另一个链选取的这个边要也在另一条链上才会有影响!而如果在另一条链上无疑也破坏了另一个关系,(虽然这个边在另一条链上不一定是最小的,但这个边对于原来的点对是必须的也是最小的,而且破坏了另一个,所以是最优的,一箭多雕)。

具体实现:

  这个题的做法无疑缩点大法:并查集!对吧?

#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的更多相关文章

  1. HDU 4313 Matrix(并查集)

    http://acm.hdu.edu.cn/showproblem.php?pid=4313 题意: 给出一棵树,每条边都有权值,其中有几个点是特殊点,现在破坏边还使得这几个特殊点互相不可达,需要使得 ...

  2. HDU 4313 Matrix 树形dp

    题意: 给定n个点的树,m个黑点 以下n-1行给出边和删除这条边的费用 以下m个黑点的点标[0,n-1] 删除一些边使得随意2个黑点都不连通. 问删除的最小花费. 思路: 树形dp 每一个点有2个状态 ...

  3. HDU 4920 Matrix multiplication(bitset)

    HDU 4920 Matrix multiplication 题目链接 题意:给定两个矩阵,求这两个矩阵相乘mod 3 思路:没什么好的想法,就把0的位置不考虑.结果就过了.然后看了官方题解,上面是用 ...

  4. HDU 2686 Matrix 3376 Matrix Again(费用流)

    HDU 2686 Matrix 题目链接 3376 Matrix Again 题目链接 题意:这两题是一样的,仅仅是数据范围不一样,都是一个矩阵,从左上角走到右下角在从右下角走到左上角能得到最大价值 ...

  5. hdu 2686 Matrix 最小费用最大流

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2686 Yifenfei very like play a number game in the n*n ...

  6. hdu 5569 matrix dp

    matrix Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5569 D ...

  7. hdu 2119 Matrix(二分匹配)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2119 Matrix Time Limit: 5000/1000 MS (Java/Others)    ...

  8. HDU 5671 Matrix 水题

    Matrix 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5671 Description There is a matrix M that has ...

  9. HDU - 233 Matrix

    原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5015 解题思路:一看到题目,感觉是杨辉三角形,然后用组合数学做,不过没想出来怎么做,后来看数据+递推思 ...

随机推荐

  1. 开源mp3播放器--madplay 编译和移植 简记

    madplay是一款开源的mp3播放器. http://madplay.sourcearchive.com/ 下面简单记录一下madplay的编译与移植到ARM开发板上的过程 一.编译x86版本的ma ...

  2. PHP SPL他们留下的宝石

    Rafael Dohms 上面的篇文章 让我为之惊艳,忍不住就翻译了下来,同一时候补充了部分内容. SPL,PHP 标准库(Standard PHP Library) ,此从 PHP 5.0 起内置的 ...

  3. loj1370(欧拉函数+线段树)

    传送门:Bi-shoe and Phi-shoe 题意:给出多个n(1<=n<=1e6),求满足phi(x)>=n的最小的x之和. 分析:先预处理出1~1e6的欧拉函数,然后建立一颗 ...

  4. LeetCode总结 -- 树的性质篇

    树的性质推断是树的数据结构比較主要的操作,一般考到都属于非常easy的题目,也就是第一道入门题.面试中最好不能有问题,力求一遍写对.不要给面试官不论什么挑刺机会.LeetCode中关于树的性质有下面题 ...

  5. hdu5001(概率dp)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5001 题意:一个人随即从一个点出发,到达邻接点的概率相同,求出走d步都不会到达1~n点的每一点i的概率 ...

  6. SQL Syscolumns

    每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行.该表位于每个数据库中. 列名 数据类型 描述 name sysname 列名或过程参数的名称. id int 该列所属的表对象 I ...

  7. ServiceCallSite

    ServiceCallSite 通过上一篇的介绍我们应该对实现在ServiceProvider的总体设计有了一个大致的了解,但是我们刻意回避一个重要的话题,即服务实例最终究竟是采用何种方式提供出来的. ...

  8. 4句代码读取Excel到DataSet(非Excel组件)

    Toxy是继NPOI之后主推的还有一个项目,主要目的是为了解决文档的抽取问题.其支持的格式包括全部docx.xlsx.xls.csv.vcard等. 以下是一个简单但非常实用的样例 ParserCon ...

  9. java List<Map> 排序问题

    Collections.sort(order_from_list, new Comparator<Map<Object, Object>>() { public int com ...

  10. 飘逸的python - __new__、__init__、__call__傻傻分不清

    __new__: 对象的创建,是一个静态方法.第一个參数是cls.(想想也是,不可能是self,对象还没创建,哪来的self) __init__ : 对象的初始化, 是一个实例方法,第一个參数是sel ...