FZU 2087 统计树边
这题第一直觉就是和CF第三次教育场的E题是一样的,
http://codeforces.com/contest/609/problem/E
然后直接拉过来代码改了改,提交返回MLE。FZU内存开的小,没救了。
后来还是同学指教,边总共只有两类,要么存在最少生成树上,要么不属于任何一个最小生成树。
所以只要按边权从小到大往图中加边,对于相同权值的边,如果两端不在一个集合中,那么答案+1,
然后再对相同权值的边加入到图中。
#include <cstdio>
#include <vector>
#include <map>
#include <algorithm>
using namespace std; const int maxn=+;
int fa[maxn]; struct Edge
{
int a,b,v;
}e[maxn];
vector<Edge>v[];
int n,m; int Find(int x)
{
if(x!=fa[x]) fa[x]=Find(fa[x]);
return fa[x];
} void read()
{
scanf("%d%d",&n,&m);
for(int i=;i<m;i++) scanf("%d%d%d",&e[i].a,&e[i].b,&e[i].v);
for(int i=;i<=;i++) v[i].clear();
for(int i=;i<m;i++) v[e[i].v].push_back(e[i]);
} void work()
{
int ans=;
for(int i=;i<=;i++)
{
if(v[i].size()==) continue;
for(int j=;j<v[i].size();j++)
{
int fu=Find(v[i][j].a);
int fv=Find(v[i][j].b);
if(fu!=fv) ans++;
}
for(int j=;j<v[i].size();j++)
{
int fu=Find(v[i][j].a);
int fv=Find(v[i][j].b);
if(fu!=fv) fa[fu]=fv;
}
}
printf("%d\n",ans);
} void init()
{
for(int i=;i<=n;i++) fa[i]=i;
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
read();
init();
work();
}
return ;
}
FZU 2087 统计树边的更多相关文章
- FZU 2087 统计树边【MST相关】
Problem 2087 统计树边 Accept: 212 Submit: 651 Time Limit: 1000 mSec Memory Limit : 32768 KB Prob ...
- [ACM] FZU 2087 统计数边 (有多少边至少存在一个最小生成树里面)
Problem Description 在图论中,树:随意两个顶点间有且仅仅有一条路径的图. 生成树:包括了图中全部顶点的一种树. 最小生成树:对于连通的带权图(连通网)G,其生成树也是带权的. 生成 ...
- BZOJ 1036 树的统计-树链剖分
[ZJOI2008]树的统计Count Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 12904 Solved: 5191[Submit][Status ...
- FZU 2082 过路费 (树链剖分 修改单边权)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2082 树链剖分模版题,求和,修改单边权. #include <iostream> #include ...
- FZU 2082 过路费(树链剖分)
FZU 2082 过路费 题目链接 树链抛分改动边的模板题 代码: #include <cstdio> #include <cstring> #include <vect ...
- 洛谷P2590 [ZJOI2008] 树的统计 [树链剖分]
题目传送门 树的统计 题目描述 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE u t : 把结点u的权值改为t ...
- luoguP2590 [ZJOI2008]树的统计(树链剖分)
luogu P2590 [ZJOI2008]树的统计 题目 #include<iostream> #include<cstdlib> #include<cstdio> ...
- bzoj1036 树的统计 树链剖分模板
题意:给出树上任意两点,求路径上的值的和与最大值,带单点修改操作 树链剖分思路: 1.对树进行dfs求出点的深度和父亲节点,然后求出轻重儿子(重儿子就是点最多的那个子树,其余都是轻儿子),用一个son ...
- zjoi 2008 树的统计——树链剖分
比较基础的一道树链剖分的题 大概还是得说说思路 树链剖分是将树剖成很多条链,比较常见的剖法是按儿子的size来剖分,剖分完后对于这课树的询问用线段树维护——比如求路径和的话——随着他们各自的链向上走, ...
随机推荐
- POJ 1067 取石子游戏 威佐夫博弈
威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜. 我们用(ak,bk)(ak ≤ bk ,k= ...
- Gym 100917C Constant Ratio 数论+暴力
题目: Description standard input/outputStatements Given an integer n, find out number of ways to repre ...
- Python作用域
以下依据Python 3 1.Python变量查找顺序为LEGB(L:Local,E:Enclosing,G:Global,B:Built-in). 2.实际上,在Python中,只有模块,类以及函数 ...
- C/C++ kubetu
reference sign & use predefine in c, but const in c++
- 第一个python实例程序
#!/usr/bin/python2.7 import os ls = os.linesep fname = raw_input("fname:"); while True: if ...
- 正确使用#include和前置声明(forward declaration)
http://blog.csdn.net/SpriteLW/article/details/965702
- Qt5:图片彩色键控,设置图片中指定颜色的像素为透明
有图片 1.png 设置该图中的颜色为粉红色的像素为透明 QPixmap pix("1.png"); QBitmap mask= pix.createMaskFromColor(Q ...
- yii migrate 设计博客
yii migrate/create create_blog_table该命令生成的迁移文件位于 advanced\console\migrations 目录,可能你已经注意到了,yii migrat ...
- C#实现拷贝对象
大家都知道,在C#中变量的存储分为值类型和引用类型两种,而值类型和引用类型在数值变化是产生的后果是不一样的,值类型我们可以轻松实现数值的拷贝,那么引用类型呢,在对象拷贝上存在着一定的难度. 下 ...
- Android AudioPolicyService和AudioPolicyManager
AudioPolicyService是Android音频系统的两大服务之一,另一个服务是AudioFlinger,这两大服务都在系统启动时有 MediaSever加载,加载的代码位于:framewor ...