Hdu4786
Fibonacci Tree
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 2340 Accepted Submission(s): 748
Consider a bidirectional graph G with N vertices and M edges. All edges are painted into either white or black. Can we find a Spanning Tree with some positive Fibonacci number of white edges?
(Fibonacci number is defined as 1, 2, 3, 5, 8, ... )
For each test case, the first line contains two integers N(1 <= N <= 105) and M(0 <= M <= 105).
Then M lines follow, each contains three integers u, v (1 <= u,v <= N, u<> v) and c (0 <= c <= 1), indicating an edge between u and v with a color c (1 for white and 0 for black).
2
4 4
1 2 1
2 3 1
3 4 1
1 4 0
5 6
1 2 1
1 3 1
1 4 1
1 5 1
3 5 1
4 2 1
Case #1: Yes
Case #2: No
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
int n,m;
int fibo[50];
int f[100010];
struct node
{
int u,v,c;
} s[100010]; bool cmp1(node x , node y)
{
return x.c < y.c;
} bool cmp2(node x, node y)
{
return x.c > y.c;
} int find(int x)
{
return x == f[x] ? x : f[x] = find(f[x]);
} void Union(int x ,int y)
{
int fx = find(x);
int fy = find(y); if(fx != fy)
{
f[fx] = fy;
}
} int main()
{
#ifdef xxz
freopen("in.txt","r",stdin);
#endif
fibo[1] = 1;
fibo[2] = 2;
for(int i = 3; ; i++)
{
fibo[i] = fibo[i-1] + fibo[i-2];
if(fibo[i] >= 100000) break;
} int T,Case = 1;;
scanf("%d",&T); while(T--)
{ scanf("%d%d",&n,&m);
for(int i = 1; i <= n; i++) f[i] = i; for(int i = 0; i < m; i++)
{ scanf("%d%d%d",&s[i].u,&s[i].v,&s[i].c);
Union(s[i].u,s[i].v);
}
int cent = 0;
int bl = 0, bh = 0;
int root = 0,size = 0; for(int i = 1; i <= n; i++)
{
if(f[i] == i)
{
cent++;
root = i;
}
} printf("Case #%d: ",Case++);
if(cent >= 2) cout<<"No"<<endl;//首先要推断能否构成一个生成树。推断根节点个数是否为1即可
else
{
sort(s,s+m,cmp1);
for(int i = 1; i <= n; i++) f[i] = i; for(int i = 0; i < m; i++)
{
int fu = find(s[i].u);
int fv = find(s[i].v);
if(fu == fv) continue; bl += s[i].c;
size++;
Union(s[i].u,s[i].v);
if(size == n-1) break;
} size = 0;
sort(s,s+m,cmp2);
for(int i = 1; i <= n; i++) f[i] = i; for(int i = 0; i < m; i++)
{
int fu = find(s[i].u);
int fv = find(s[i].v);
if(fu == fv) continue; bh += s[i].c;
size++;
Union(s[i].u,s[i].v);
if(size == n-1) break;
} int flag = 0;
for(int i =1; fibo[i] <= 100000 ; i++ )
{
if(fibo[i] >= bl && fibo[i] <= bh)
{
flag = 1;
break;
}
}
if(flag) printf("Yes\n");
else printf("No\n"); } }
}
Hdu4786的更多相关文章
- 【最小生成树】【kruscal】hdu4786 Fibonacci Tree
假设这张图能够形成具有k条白边的生成树, 则易证k一定形成一个连续的区间[a,b],中间一定不会断开.要是断开……tm怎么可能. 所以求出a,b就好啦,人家都给你把白边赋成1了,直接跑一下最小生成树, ...
- hdu4786 Fibonacci Tree (最小生成树)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4786 题意:给定图的n个点和m条双向边,告诉你每条边的权值.权值为1表示该边是白边,权值为0表示该边为 ...
- hdu4786 Fibonacci Tree[最小生成树]【结论题】
一道结论题:如果最小生成树和最大生成树之间存在fib数,成立.不存在或者不连通则不成立.由于是01图,所以这个区间内的任何生成树都存在. 证明:数学归纳?如果一棵树没有办法再用非树边0边替代1边了,那 ...
- 最小生成树练习2(Kruskal)
两个BUG鸣翠柳,一行代码上西天... hdu4786 Fibonacci Tree(生成树)问能否用白边和黑边构成一棵生成树,并且白边数量是斐波那契数. 题解:分别优先加入白边和黑边,求出生成树能包 ...
- Fibonacci Tree
hdu4786:http://acm.hdu.edu.cn/showproblem.php?pid=4786 题意:给你一个无向图,然后其中有的边是白色的有的边是黑色的.然后问你是否存在一棵生成树,在 ...
- The 2013 ACMICPC Asia Regional Chengdu
还有19天出发北京站,今年北京站的出题方是上交,去年他们出的成都现场的赛题,首先复盘一下. 去年的成都是我经历的第一次现场赛,也是近距离第一次见到了CLJ的真人,最后也是被虐惨了,那时候是声闻大神带着 ...
随机推荐
- iOS UI16_数据持久化
// // Student.h // UI16_数据持久化 // // Created by dllo on 15/8/19. // Copyright (c) 2015年 zhozhicheng. ...
- css样式中@import引入样式
css样式中@import引入样式 学习了:http://www.cnblogs.com/zbo/archive/2010/11/17/1879590.html
- C++实现页码数字统计
#include<iostream> #include<iomanip> #include<cstdlib> #include<ctime> #incl ...
- 怎样利用JDBC连接并操作Oracle数据库
之前学习.NET的时候.以前利用ODBC进行连接数据库,而在Java中通常採用JDBC连接数据库,这里以oracle数据库为例简单的总结一下利用JDBC怎样连接并操作数据库. 1.连接 public ...
- System.getProperty()方法可以获取的值
/** 获得当前类的完整路径.最后一句 */ package org.outman.dms.server; import java.net.MalformedURLException; import ...
- Codeforces Round #252 (Div. 2)-C,D
C题就是一个简单的模拟.首先给每一个人两个.然后把剩下的都给一个人就好了. 给的时候蛇形给. #include<stdio.h> #include<string.h> #inc ...
- 一个软件实现的Linux看门狗—soft_wdt
soft_wdt(下面简称本软件)是一个软件实现的Linux看门狗. 本软件是一款开源.免费软件. 下载地址: https://github.com/sunmingbao/soft-wdt/archi ...
- FireFox所支持的全部标签(持续更新ing)
近期研究上各个浏览器的差别,得到一些资料,FireFox眼下所支持的全部标签类型,持续更新,供大家參考和学习,不喜勿喷哦 http://mxr.mozilla.org/seamonkey/source ...
- mariadb克隆
oracle有克隆安装,事实上mysql/mariadb相似.仅仅需简单几步就能够直接在异机直接启动. 环境: node01安装完毕的mariadb; node02一个新机器 如今将node01克隆到 ...
- 通过setInterval函数在地图上每隔1s打一次点
<?php echo <<<_END <!doctype html> <html> <head> <meta charset=&quo ...