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来剖分,剖分完后对于这课树的询问用线段树维护——比如求路径和的话——随着他们各自的链向上走, ...
随机推荐
- java实现类似qq的窗口对聊
Swing实现界面,socket实现通信 package com.learn.talk; import java.awt.BorderLayout; import java.awt.Dimension ...
- JdbcTemplate学习笔记
JdbcTemplate学习笔记 1.使用JdbcTemplate的execute()方法执行SQL语句 Java 代码 jdbcTemplate.execute("CREATE TABLE ...
- C语言中static作用
在C语言中,static的字面意思很容易把我们导入歧途,其实它的作用有三条. (1)先来介绍它的第一条也是最重要的一条:隐藏. 当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有 ...
- fidder 调试本地文件
- 小师妹问 easyUI mergeCells 行合并后表头和内容对不齐
公司来了一个做easyUI的妹子,恰好那妹子是和我一个学校的,有一天下班妹子在超时买东西正好巧遇,然后妹子就问了问题,随便说手机卡需要我帮忙刷机,然后就问手机买了多久, 多少钱,刚买的时候好用不,然后 ...
- java数据结构之二叉树的实现
java二叉树的简单实现,可以简单实现深度为n的二叉树的建立,二叉树的前序遍历,中序遍历,后序遍历输出. /** *数据结构之树的实现 *2016/4/29 * **/ package cn.Link ...
- publish over ssh
http://stackoverflow.com/questions/22158092/jenkins-transferring-0-files-using-publish-over-ssh-plug ...
- Ubuntu下安装Reids
安装 官网 http://redis.io/ 下载安装包 redis-3.0.5.tar.gz 解压 tar -zxvf redis-3.0.5.tar.gz cd redis-3.0.5 安 ...
- Linux学习 -- Shell编程 -- 字符截取命令
cut字段提取命令 cut [选项] 文件名 -f 列号: -d 分隔符: 局限性:空格为分隔符时不适用 printf命令 printf '输出类型输出格式' 输出内容 %s, %i, %f \a, ...
- Linux学习 -- Shell基础 -- Bash基本功能
历史命令 history -c clear -w 写入 ~/.bash_history 默认保存1000条, 可在/etc/profile中修改 调用 Tab补全 命令.目录.文件 命令别名 ...