SDOJ 3696 Tree
描述
给你一个无向带权连通图,每条边是黑色或白色。让你求一棵最小权的恰好有need条白色边的生成树。 题目保证有解。
输入
第一行V,E,need分别表示点数,边数和需要的白色边数。
接下来E行
每行s,t,c,col表示这边的端点(点从0开始标号),边权,颜色(0白色1黑色)
输出
一行表示所求生成树的边权和。
样例输入
0 1 1 1
0 1 2 0
样例输出
数据规模和约定
0%:V<=10
30%:V<=15
100%:V<=50000,E<=100000
所有数据边权为[1,100]中的正整数。
.......................
太困了!!!!!!
先贴个代码 明天再写思路
耶~
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define N 50010
using namespace std;
int n,m,k;
int first[N],cnt;
int a[N*],b[N*],c[N*],d[N*];
int fa[N],sum;
struct node
{
int u,v,w,nxt;
int col;
}e[N*];
void ade(int x,int y,int z,int c,int i)
{
e[i].u=x;
e[i].v=y;
e[i].w=z;
e[i].col=c;
}
bool cmp(const node &p,const node &q)
{
if(p.w!=q.w)
return p.w<q.w;
return p.col<q.col;
}
int la(int x)
{
if(fa[x]!=x) fa[x]=la(fa[x]);
return fa[x];
}
bool kruskal(int x)
{
for(int i=;i<n;i++) fa[i]=i;
for(int i=;i<=m;i++)
{
ade(a[i],b[i],c[i],d[i],i);
if(d[i]==) e[i].w+=x;
}
sort(e+,e+m+,cmp);
sum=;
int num=,ans=;
for(int i=;i<=m;++i)
{
if(la(e[i].u)!=la(e[i].v))
{
num++;
sum+=e[i].w;
fa[la(e[i].u)]=la(e[i].v);
if(e[i].col==) ans++;
}
if(num==n-) break;
}
if(ans>=k)
return true;
return false;
}
int main()
{
scanf("%d%d%d",&n,&m,&k);
for(int i=;i<=m;i++)
scanf("%d%d%d%d",&a[i],&b[i],&c[i],&d[i]);
int l=-,r=,mid;
while(l<r)
{
mid=(l+r+)>>;
if(kruskal(mid)) l=mid;
else r=mid-;
}
kruskal(l);
printf("%d",sum-k*l);
return ;
}
SDOJ 3696 Tree的更多相关文章
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- SAP CRM 树视图(TREE VIEW)
树视图可以用于表示数据的层次. 例如:SAP CRM中的组织结构数据可以表示为树视图. 在SAP CRM Web UI的术语当中,没有像表视图(table view)或者表单视图(form view) ...
- 无限分级和tree结构数据增删改【提供Demo下载】
无限分级 很多时候我们不确定等级关系的层级,这个时候就需要用到无限分级了. 说到无限分级,又要扯到递归调用了.(据说频繁递归是很耗性能的),在此我们需要先设计好表机构,用来存储无限分级的数据.当然,以 ...
- 2000条你应知的WPF小姿势 基础篇<45-50 Visual Tree&Logic Tree 附带两个小工具>
在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...
- Leetcode 笔记 110 - Balanced Binary Tree
题目链接:Balanced Binary Tree | LeetCode OJ Given a binary tree, determine if it is height-balanced. For ...
- Leetcode 笔记 100 - Same Tree
题目链接:Same Tree | LeetCode OJ Given two binary trees, write a function to check if they are equal or ...
- Leetcode 笔记 99 - Recover Binary Search Tree
题目链接:Recover Binary Search Tree | LeetCode OJ Two elements of a binary search tree (BST) are swapped ...
- Leetcode 笔记 98 - Validate Binary Search Tree
题目链接:Validate Binary Search Tree | LeetCode OJ Given a binary tree, determine if it is a valid binar ...
- Leetcode 笔记 101 - Symmetric Tree
题目链接:Symmetric Tree | LeetCode OJ Given a binary tree, check whether it is a mirror of itself (ie, s ...
随机推荐
- To run dex in process, the Gradle daemon needs a larger heap
http://blog.csdn.net/u012995856/article/details/52595653
- 命令方式重新签名apk
1.(每个指令之间要有一个空格) 注:拿到一个apk后,首先删除META-INF. 1.如果你的电脑装的是jdk1.6,就用下面的命令: 打开命令符,首先直接输入: Jarsigner -keysto ...
- HDU 1847 Good Luck in CET-4 Everybody! 四级好运!(博弈)
思路:先用P/N状态来找规律. N状态:1 2 4 6 8 16 P状态:3 5 因为3=1+2, 无论拿1或者2皆输.看看5,只要抽掉2就变成了3,所以是N状态.看看6,可以抽掉1 2 4,若抽1, ...
- 洛谷 P2424 约数和
题目背景 Smart最近沉迷于对约数的研究中. 题目描述 对于一个数X,函数f(X)表示X所有约数的和.例如:f(6)=1+2+3+6=12.对于一个X,Smart可以很快的算出f(X).现在的问题是 ...
- 晒一下MAC下终端颜色配置
效果图: ~/.vimrc 配置 filetype on set history=1000 set background=dark syntax on set autoindent set smart ...
- CF Gym 100463D Evil (二维前缀和+离散)
题意:给一些带颜色的点,求一个最小的矩形,恰好包括一半的红色点,且不包括蓝色点. 题解:暴力,求个二维前缀和,用容斥原理更新一下.N很小所以我采用了离散优化,跑了个0ms. 之前没写过二维前缀和,加上 ...
- Python XML 解析
什么是 XML? XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并 ...
- Problem D: 小平查密码
Problem D: 小平查密码 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 194 Solved: 40[Submit][Status][Web ...
- VMware的centos的配置分区
/ ext3 8189 固定大小空 swap 509 固定大小/boot ext3 100 固定大小/home ext3 全部(使用全部可用空间) 利用的工具 AMFTP ...
- 02_5if switch分支与循环语句
02_5if switch分支与循环语句 1.语句 1.1条件语句-根据不同条件,执行不同语句. if if ... else if ... else if if ... else if ... el ...