Hdu--4876(MST,变形)

本文详细介绍了如何使用最小生成树算法解决特定问题,通过调整边的颜色优先级来确定生成树中白色边的数量范围,并利用并查集判断图的连通性。

2014-11-06 22:58:13

思路:首先尽量用黑边来生成树,然后尽量用白边来生成树。这样就求出了生成树内白边数量的最小可能值min和最大可能值max,那么min~max之间的值都是能取到的。(具体证明不是彻底懂)

   注意:判图连通性用并查集时,判断所有点的祖先是相同的,找每个点的祖先时一定要找到最祖先,用Find()函数,切记!

  1 /*************************************************************************
  2     > File Name: 4786.cpp
  3     > Author: Nature
  4     > Mail: 564374850@qq.com 
  5     > Created Time: Thu 06 Nov 2014 08:00:18 PM CST
  6 ************************************************************************/
  7 
  8 #include <cstdio>
  9 #include <cstring>
 10 #include <cstdlib>
 11 #include <cmath>
 12 #include <vector>
 13 #include <map>
 14 #include <set>
 15 #include <stack>
 16 #include <queue>
 17 #include <iostream>
 18 #include <algorithm>
 19 using namespace std;
 20 #define lp (p << 1)
 21 #define rp (p << 1|1)
 22 #define getmid(l,r) (l + (r - l) / 2)
 23 #define MP(a,b) make_pair(a,b)
 24 typedef long long ll;
 25 const int INF = 1 << 30;
 26 const int maxn = 100010;
 27 
 28 int T,N,M,ans;
 29 int fa[maxn];
 30 int fib[30];
 31 struct node{
 32     int u,v,c;
 33 }e[maxn];
 34 
 35 void Pre(){
 36     fib[0] = 1;
 37     fib[1] = 1;
 38     for(int i = 2; i <= 25; ++i)
 39         fib[i] = fib[i - 1] + fib[i - 2];
 40 }
 41 
 42 int Find(int x){
 43     return fa[x] == x ? x : fa[x] = Find(fa[x]);
 44 }
 45 
 46 void Union(int a,int b){
 47     int x = Find(a);
 48     int y = Find(b);
 49     if(x != y)
 50         fa[y] = x;
 51 }
 52 
 53 void Kruskal(){
 54     for(int i = 1; i <= N; ++i)
 55         fa[i] = i;
 56     for(int i = 1; i <= M; ++i){
 57         int x = Find(e[i].u);
 58         int y = Find(e[i].v);
 59         if(x != y){
 60             fa[y] = x;
 61             if(e[i].c == 1)
 62                 ++ans;
 63         }
 64     }
 65 }
 66 
 67 bool cmp1(node a,node b){
 68     return a.c > b.c;
 69 }
 70 
 71 bool cmp2(node a,node b){
 72     return a.c < b.c;
 73 }
 74 
 75 int main(){
 76     Pre();
 77     int a,b,c;
 78     scanf("%d",&T);
 79     for(int Case = 1; Case <= T; ++Case){
 80         scanf("%d%d",&N,&M);
 81         printf("Case #%d: ",Case);
 82         for(int i = 1; i <= N; ++i)
 83             fa[i] = i;
 84         for(int i = 1; i <= M; ++i){
 85             scanf("%d%d%d",&e[i].u,&e[i].v,&e[i].c);
 86             Union(e[i].u,e[i].v);
 87         }
 88         if(M < N - 1){
 89             printf("No\n");
 90             continue;
 91         }
 92         int anc = Find(1),flag = 1;
 93         for(int i = 2; i <= N; ++i){
 94             if(Find(i) != anc){
 95                 flag = 0;
 96                 break;
 97             }
 98         }
 99         if(!flag){
100             printf("No\n");
101             continue;
102         }
103         int bot,top;
104         sort(e + 1,e + M + 1,cmp1);
105         ans = 0;
106         Kruskal();
107         top = ans;
108 
109         sort(e + 1,e + M + 1,cmp2);
110         ans = 0;
111         Kruskal();
112         bot = ans;
113         
114         flag = 0;
115         //printf("%d %d\n",bot,top);
116         for(int i = 1; i <= 25; ++i){
117             if(fib[i] >= bot && fib[i] <= top){
118                 flag = 1;
119                 break;
120             }
121         }
122         if(flag) printf("Yes\n");
123         else printf("No\n");
124     }
125     return 0;
126 }

 

转载于:https://www.cnblogs.com/naturepengchen/articles/4080181.html

先看效果: https://renmaiwang.cn/s/jkhfz Hue系列产品将具备高度的个性化定制能力,并且借助内置红、蓝、绿三原色LED的灯泡,能够混合生成1600万种不同色彩的灯光。 整个操作流程完全由安装于iPhone上的应用程序进行管理。 这一创新举措为智能照明控制领域带来了新的启示,国内相关领域的从业者也积极投身于相关研究。 鉴于Hue产品采用WiFi无线连接方式,而国内WiFi网络尚未全面覆盖,本研究选择应用更为普及的蓝牙技术,通过手机蓝牙与单片机进行数据交互,进而产生可调节占空比的PWM信号,以此来控制LED驱动电路,实现LED的调光功能以及DIY调色方案。 本文重点阐述了一种基于手机蓝牙通信的LED灯设计方案,该方案受到飞利浦Hue智能灯泡的启发,但考虑到国内WiFi网络的覆盖限制,故而选用更为通用的蓝牙技术。 以下为相关技术细节的详尽介绍:1. **智能照明控制系统**:智能照明控制系统允许用户借助手机应用程序实现远程控制照明设备,提供个性化的调光及色彩调整功能。 飞利浦Hue作为行业领先者,通过红、蓝、绿三原色LED的混合,能够呈现1600万种颜色,实现了全面的定制化体验。 2. **蓝牙通信技术**:蓝牙技术是一种低成本、短距离的无线传输方案,工作于2.4GHz ISM频段,具备即插即用和强抗干扰能力。 蓝牙协议栈由硬件层和软件层构成,提供通用访问Profile、服务发现应用Profile以及串口Profiles等丰富功能,确保不同设备间的良好互操作性。 3. **脉冲宽度调制调光**:脉冲宽度调制(PWM)是一种高效能的调光方式,通过调节脉冲宽度来控制LED的亮度。 当PWM频率超过200Hz时,人眼无法察觉明显的闪烁现象。 占空比指的...
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值