hdu4750Count The Pairs(最小生成树找瓶颈边)

 1 /*
 2    题意:就是给你一个图,图的每两个点都有多条路径,每一条路径中都有一条最大边,
 3    所有最大边的最小边(也就是瓶颈边)就是这两点之间的val值!然后给你一个值f,
 4    问有多少个顶点对的val>=f! (u,v) 和 (v, u)是不同的顶点对!
 5 
 6    思路:最小生成树(kruskral)那么每两个节点(u,v)的瓶颈边就是这一棵树中u到v
 7          的路径中的最大边值!
 8          在利用并查集的过程中,A, B两个集合,如果有u属于A,v属于B,且u-v可以将
 9          A-B集合连接起来,因为边值由小到大选取,那么以u-v边为瓶颈边的节点的个数
10          就是[A]*[B]*2;
11 
12    注意:图不一定是连通的,开始的时候当成了一棵树,怎么改都不对!
13 */
14 #include<iostream>
15 #include<cstring>
16 #include<cstdio>
17 #include<algorithm>
18 #define N 10105
19 #define M 500105
20 using namespace std;
21 int f[N];
22 struct Edge{
23     int u, v, w;
24     Edge(){}
25     Edge(int u, int v, int w){
26         this->u=u;
27         this->v=v;
28         this->w=w;
29     }
30 };
31 
32 Edge edge[M];
33 int dist[N];
34 int rank[N];
35 int cnt[N];
36 int edgeN;
37 int sumN[N];
38 int n, m;
39 
40 bool cmp(Edge a, Edge b){
41    return a.w < b.w;
42 }
43 
44 int getFather(int x){
45    return x==f[x] ? x : f[x]=getFather(f[x]);
46 }
47 
48 bool Union(int a, int b){
49    a=getFather(a); 
50    b=getFather(b);
51    if(a!=b){
52       cnt[++edgeN]=sumN[a]*sumN[b]*2;//记录以这一条边为瓶颈边的节点对的个数
53       if(rank[a]>rank[b]){
54           f[b]=a;
55           sumN[a]+=sumN[b];//将b集合放入到a集合中去
56       }
57       else{
58          f[a]=b;
59          sumN[b]+=sumN[a];//将a集合放入到b集合中去
60          ++rank[b];
61       }
62       return true;
63    }
64    return false;
65 }
66 
67 void Kruskral(){
68    edgeN=0;
69    sort(edge, edge+m, cmp);
70    for(int i=1; i<=n; ++i)
71       f[i]=i, rank[i]=0, sumN[i]=1;
72    for(int i=0; i<m; ++i)
73     if(Union(edge[i].u, edge[i].v))
74        dist[edgeN]=edge[i].w;//记录最小生成树中的边值
75    cnt[edgeN+1]=0;
76    for(int i=edgeN; i>=1; --i)//统计大于等于第i条边为瓶颈边边值的所有节点对的对数
77        cnt[i]+=cnt[i+1];
78 }
79 
80 int main(){
81     int p;
82     while(scanf("%d%d", &n, &m)!=EOF){
83         for(int i=0; i<m; ++i){
84            int u, v, w;
85            scanf("%d%d%d", &u, &v, &w);
86            edge[i]=Edge(u+1, v+1, w);
87         }
88         Kruskral();
89         scanf("%d", &p);
90         while(p--){
91            int x;
92            scanf("%d", &x);
93            int index=lower_bound(dist+1, dist+edgeN+1, x)-dist;
94            if(index>edgeN) printf("0\n");
95            else printf("%d\n", cnt[index]);
96         }
97     }
98     return 0;
99 }

//如果最后只有一棵树的话,这样做就可以了!没想到可能不是仅仅一棵树
1
#include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 #define N 10105 6 #define M 500105 7 using namespace std; 8 int f[N]; 9 struct Edge{ 10 int u, v, w; 11 Edge(){} 12 Edge(int u, int v, int w){ 13 this->u=u; 14 this->v=v; 15 this->w=w; 16 } 17 }; 18 19 Edge edge[M]; 20 int dist[N]; 21 int rank[N]; 22 int cnt[N]; 23 int edgeN; 24 25 int n, m; 26 27 bool cmp(Edge a, Edge b){ 28 return a.w < b.w; 29 } 30 31 int getFather(int x){ 32 return x==f[x] ? x : f[x]=getFather(f[x]); 33 } 34 35 bool Union(int a, int b){ 36 a=getFather(a); 37 b=getFather(b); 38 if(a!=b){ 39 if(rank[a]>rank[b]) 40 f[b]=a; 41 else{ 42 f[a]=b; 43 ++rank[b]; 44 } 45 return true; 46 } 47 return false; 48 } 49 50 void Kruskral(){ 51 edgeN=0; 52 sort(edge, edge+m, cmp); 53 for(int i=1; i<=n; ++i) 54 f[i]=i, rank[i]=0; 55 for(int i=0; i<m; ++i) 56 if(Union(edge[i].u, edge[i].v)) 57 dist[++edgeN]=edge[i].w; 58 cnt[edgeN+1]=0; 59 for(int i=edgeN; i>=1; --i){ 60 cnt[i]=i*2; 61 cnt[i]+=cnt[i+1]; 62 } 63 } 64 65 int main(){ 66 int p; 67 while(scanf("%d%d", &n, &m)!=EOF){ 68 for(int i=0; i<m; ++i){ 69 int u, v, w; 70 scanf("%d%d%d", &u, &v, &w); 71 edge[i]=Edge(u+1, v+1, w); 72 } 73 Kruskral(); 74 scanf("%d", &p); 75 while(p--){ 76 int x; 77 scanf("%d", &x); 78 int index=lower_bound(dist+1, dist+edgeN+1, x)-dist; 79 if(index>edgeN) printf("0\n"); 80 else printf("%d\n", cnt[index]); 81 } 82 } 83 return 0; 84 }

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/290787.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

服务器的响应一直一直发送不过去,zeroRPC:在发送响应后继续运行进程

我使用Python2.7和zeroRPC使客户机和服务器通信。我希望客户端向服务器发送一个请求&#xff0c;我希望服务器发送一个响应以确认它已收到请求。但是我希望服务器对该请求执行一些繁重的计算。这些计算将花费数小时&#xff0c;并且不会产生任何响应&#xff0c;因此客户机不应…

白平衡自己主动(AWB)算法---2,颜色计算

本文说明了白平衡算法估计当前场景的色温过程. 色温计算的原理并不复杂,但要做到,还是一道&#xff0c;认真做好每一步,这需要大量的测试,和算法一直完好. 关于该过程首先简要: 1, 取的图像数据,并划分MxN块,如果是25x25,并统计每一块的基本信息(,白色像素的数量及R/G/B通道的分…

【机房收费系统】多么痛的领悟

这次机房收费系统&#xff0c;是全部的项目中&#xff0c;自己完毕的最不惬意的了。 时间之长。效率之慢。一開始。就感觉无从下手&#xff0c;但总会相信自己能慢慢的进入状态。最终有机会自己练练手了。也自觉得之前自己设计模式学的还不错。也最终有机会能自己想想设计模式了…

linux(windows)之svn重定向地址

1、问题 svn下载的项目路径需要换&#xff0c;也就是下面的URL:SVN:// 需要修改 2、解决办法 linux平台 svn switch --relocate oldSvnPath newSvnPath windows平台 右击项目 TortoiseSVN->Relocate 然后修改就行

简单的邮箱格式校验方式

简单的邮箱格式校验方式Intro前段时间有一个验证邮箱格式的小需求&#xff0c;然后突然发现了一种非常简单的邮箱格式判断方式Implement直接来看实现public static bool IsEmailAddress(string email) {if (string.IsNullOrWhiteSpace(email))return false;var symbolIndex em…

Ubuntu14.04LST安装weblogic11g

1:下载链接http://download.oracle.com/otn/nt/middleware/11g/wls/1036/wls1036_generic.jar 2:进行安装&#xff08;前提已经安装好JDK&#xff09; yy:~/my_download$ java -d64 -Xmx1024m -jar wls1036_generic.jar Extracting 0%.......................................…

服务器连接不稳定fifa,fifa服务器链接异常

fifa服务器链接异常 内容精选换一换获取登录密码Windows操作系统在创建时只能选择密钥登录&#xff0c;需要先将密钥文件解析为密码&#xff0c;参考链接&#xff1a;获取Windows裸金属服务器的密码Windows操作系统在创建时只能选择密钥登录&#xff0c;需要先将密钥文件解析为…

并发编程总结4-JUC-REENTRANTLOCK-2(公平锁)

内容包括&#xff1a;1、ReentrantLock函数分析2、ReentrantLock公平锁源码&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#xff0d;&#…

Android之项目全部能正常登录但是部分资源没有显示成功的解决办法

1、问题 自己写的项目&#xff0c;PC端没有问题&#xff0c;移动端有问题 第一个问题 部分能登录&#xff0c;一部分不能登录 第二个问题 解决第一个问题后&#xff0c;全部能登录&#xff0c;但是登录之后部分资源显示不成功&#xff0c;部分可以 2、原因 第一个问题的原…

ASP.NET Core 6 的性能改进

受到 由Stephen Toub 发布的关于 .NET 性能的博客的启发&#xff0c;我们正在写一篇类似的文章来强调ASP.NET Core 在6.0 中所做的性能改进。基准设置我们整个过程中大部分的实例使用的是BenchmarkDotNet。在此链接上提供了repo&#xff0c;其中包括本文中使用的大多数基准。Be…

(转载)在服务器上排除问题的头5分钟

尽可能搞清楚问题的前因后果 不要一下子就扎到服务器前面&#xff0c;你需要先搞明白这台服务器有多少已知的情况&#xff0c;还有故障的具体情况&#xff0c;不然你很有可能是在无的放矢必须要搞清楚的问题&#xff1a;故障的表现是什么&#xff1f;无响应&#xff1f;报错&am…

wikioi 1034 家 实时动态的网络流量(费用流)

因为随着时间的推移。网络侧变得&#xff0c;因此&#xff0c;常见的网络流量也解决不了这个问题&#xff0c;。如果T毕竟运输时间。为此。我们可以基于时间分割点&#xff0c;所有的点将被分割为T点。 对于每一个点&#xff0c;下一次甚至一个容量为本人INF边缘&#xff0c;费…

华为服务器只显示一个下划线,华为官方解释:为什么鸿蒙系统logo下面会有一条下划线...

HarmonyOS 的 Logo 中为什么有一横&#xff1f;为什么这一横偏偏是蓝色&#xff1f;HarmonyOS 的字体设计又藏着什么奥秘&#xff1f;6月10日晚&#xff0c;华为官方微博对鸿蒙系统LOGO设计寓意&#xff0c;作出了官方科普。下面就来为你一一解答在现代汉语中“旦”字与鸿蒙OS中…

Android之jni出现JNIEnv has no member named ‘GetMehtodID‘解决办法

1、问题 ndk-build提示 JNIEnv has no member named GetMehtodID 2、原因 我把那个函数写错了 3、解决办法 复制上面正常的函数&#xff0c;把函数改为 env->GetMethodID

ORACLE利用STANDBY端RMAN备份进行数据恢复

这里记录一下流程&#xff0c;有我和同事问心进行测试 dataguard主库和物理备库主要是controlfile文件有区别&#xff0c;用restore可以查看含有primary,standby关键字 RMAN> restore ; RMAN-00571: RMAN-00569: ERROR MESSAGE STACK FOLLOWS RMAN-00571: RMAN-00558: e…

腾讯急招多名.NET Core,5年30k!

金三银四跳槽季&#xff0c;腾讯急招5年左右.NET Core高级开发岗&#xff0c;基本月薪能到30k&#xff0c;心动吗&#xff1f;这里推荐个.NET跳槽大厂交流群&#xff0c;有技术交流&#xff0c;有面经分享&#xff0c;还有内推通道&#xff0c;据说有一定几率降低学历要求&…

【BZOJ】1679: [Usaco2005 Jan]Moo Volume 牛的呼声(数学)

http://www.lydsy.com/JudgeOnline/problem.php?id1679 水题没啥好说的。。自己用笔画画就懂了 将点排序&#xff0c;然后每一次的点到后边点的声音距离和(n-i)*(a[i1]-a[i])之前同样操作所得的的sum 然后答案就是累加后2 #include <cstdio> #include <cstring> #…

perl学习笔记——目录操作

在目录书中移动 chdir 操作副改变当前的工作目录。它和shell中cd命令类似&#xff1a; chdir ‘/etc’ or die “cannot chdir to /etc:$1”; 注意&#xff1a;工作目录不能更改的&#xff0c;也就是说Perl程序返回后一定会回到所在的工作目录。 如果调用chdir时不加参数&#…

凌动服务器系列,凌动也能造服务器?超微又出怪异新品

【IT168 专稿】上月初举行的英特尔春季IDF上&#xff0c;记者看到超微展示了采用独特设计的2U Twin系列高密度Nehalem服务器&#xff0c;该服务器采用了全冗余设计&#xff0c;包括主板在内的所有部件都有两个互为备份。可以说超微一直以来都以自身独特的设计理念和大胆的实践拓…

C语言——关于数据在内存中存储的练习

大家好&#xff0c;我是残念&#xff0c;希望在你看完之后&#xff0c;能对你有所帮助&#xff0c;有什么不足请指正&#xff01;共同学习交流 本文由&#xff1a;残念ing原创CSDN首发&#xff0c;如需要转载请通知 个人主页&#xff1a;残念ing-CSDN博客&#xff0c;欢迎各位→…