完美网络(优先队列)

完美网络

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

完美网络是连通网络的基础上要求去掉网络上任意一条线路,网络仍然是连通网络。求一个连通网络要至少增加多少条边可以成为完美网络。

输入

第一行输入一个数T代表测试数据个数(T<=20)。每个测试数据第一行2个数n,m 分别代表网络基站数和基站间线路数。基站的序号为从1到n。接下来m行两个数代表x,y 代表基站x,y间有一条线路。

(0 < n < m < 10000)

输出

对于每个样例输出最少增加多少线路可以成为完美网络。每行输出一个结果。

示例输入

2
3 1
1 2
3 2
1 2
2 3

示例输出

2
1 

提示

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<iostream>

using namespace std;

int du[1000001];
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		memset(du,0,sizeof(du));
		int n,m;
		cin>>n>>m;
		for(int i=0;i<m;i++)
		{
			int x,y;
			cin>>x>>y;
			du[x]++;     //每个节点的入度数先加1
			du[y]++;
		}
		priority_queue<int ,vector<int>,greater<int> >x; //构造优先队列
		//优先队列
		int count=0;
		for(int i=1;i<=n;i++)
		{
			if(du[i]<2)     //只要是入度数小于2的就压进队列中,因为如果要构成完美图
				           //,那么每个节点的入度数要大于等于2
			{
				x.push(du[i]);
			}
		}
		while(x.size()>=2)
		{
			int t1=x.top();  //从队列中取出两个元素,因为一条边连接两个顶点
			x.pop();
			int t2=x.top();
			x.pop();

			t1++;
			t2++;
			count++;
			if(t1<2) //如果该节点的入度数还是小于2,继续压进队列
			{
				x.push(t1);
			}
			if(t2<2)
			{
				x.push(t2);
			}
		}
		if(!x.empty())//如果队列中还剩余一个节点,那么条数也要加1
			count++;
		cout<<count<<endl;
	}
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-12-28 16:48:11

完美网络(优先队列)的相关文章

完美网络 (优先队列)

完美网络 Time Limit: 1000MS Memory limit: 65536K 题目描述 完美网络是连通网络的基础上要求去掉网络上任意一条线路,网络仍然是连通网络.求一个连通网络要至少增加多少条边可以成为完美网络. 输入 第一行输入一个数T代表测试数据个数(T<=20).每个测试数据第一行2个数n,m 分别代表网络基站数和基站间线路数.基站的序号为从1到n.接下来m行两个数代表x,y 代表基站x,y间有一条线路. (0 输出 对于每个样例输出最少增加多少线路可以成为完美网络.每行输出一

完美网络(优先队列实现)

完美网络 Time Limit: 1000MS Memory limit: 65536K 题目描述 完美网络是连通网络的基础上要求去掉网络上任意一条线路,网络仍然是连通网络.求一个连通网络要至少增加多少条边可以成为完美网络. 输入 第一行输入一个数T代表测试数据个数(T<=20).每个测试数据第一行2个数n,m 分别代表网络基站数和基站间线路数.基站的序号为从1到n.接下来m行两个数代表x,y 代表基站x,y间有一条线路. (0 输出 对于每个样例输出最少增加多少线路可以成为完美网络.每行输出一

数据结构之 图论---完美网络(添加无向边构造完美网络,线性实现)

完美网络 Time Limit: 1000MS Memory limit: 65536K 题目描述 完美网络是连通网络的基础上要求去掉网络上任意一条线路,网络仍然是连通网络.求一个连通网络要至少增加多少条边可以成为完美网络. 输入 第一行输入一个数T代表测试数据个数(T<=20).每个测试数据第一行2个数n,m 分别代表网络基站数和基站间线路数.基站的序号为从1到n.接下来m行两个数代表x,y 代表基站x,y间有一条线路. (0 输出 对于每个样例输出最少增加多少线路可以成为完美网络.每行输出一

Openvpn完美解决公司网络没有固定公网IP的问题

方案背景: 公司办公网络使用长城宽带上网有一段时间了,有4个固定IP(2个电信,2个网通),链路不太稳定,经常有问题,因此考虑取消长城宽带,采用原来的adsl上网.但是有个问题,因为公司内网有几台服务器,需要通过固定IP接受外网用户发送的数据,因此如果没有公网IP,而ADSL获取的IP会变化,那么内网服务器接受外面用户的数据就会受到影响,通过采用openvpn很好的解决了这个问题.这个前提是你在机房的服务器有固定IP.   应用场景 公司在托管机房有公网IP,在公司内部采用ADSL上网,又需要接

iOS完美的网络状态判断工具

大多数App都严重依赖于网络,一款用户体验良好的的app是必须要考虑网络状态变化的.iOSSinger下一般使用Reachability这个类来检测网络的变化. Reachability 这个是苹果开发文档里面的一个类,官方写的,用来判断网络的变化,包括无网络,wifi,和蜂窝三种情况.Reachability类实际上是苹果公司对SCNetworkReachability API的封装,使用方法比较简单,这里不再介绍.说说它的优缺点: 优点 使用简单,只有一个类,官方还有Demo,容易上手 灵敏

2016大连网络赛 1008 &amp; hdu5875 (优先队列+离线)=不确定暴力

题意:给你一个区间,求a_l%a_(l+1)%a_(l+2)%-%a_r 的值 分析:听说一个数在给定区间中只有不是很多的位置可一连续对它求模,所以想到一个比较暴力有可行的方法,猜想复杂度应该是nlogn.具体是这样的,从左到有枚举每个位置, L[]记录[1,r]中所有元素连续取模到r的值.一开始把a[1]加进优先队列pq,对于第二位置,若pq.top()>=a[i],取出并取模,然后更新对应的位置l的答案,并把取模后答案插入优先队列,然后处理有区间是2的所有询问.对于第i个位置,若pq.top

两台linux完美实现双机热备【来源网络尚未实践】

[来源:http://rainbird.blog.51cto.com/211214/225541/] 一直想做基于linux的双机热备,一直没有时间和机会.一直以为只要做双机热备的实验就必须两台机器外接一个存储.甚至一个月以前在学习keepalived的时候还在琢磨keepalvied去掉哪些条件可以实现双机热备.直到一个月以前设计存储方案的时候部门老大给了一个国外的链接介绍drbd+nfs实现nfs的热备方案的时候,我的眼前一亮,这不就是我一直想做的不依靠存储实现热备的解决方案吗? 先来纠正一

4538: [Hnoi2016]网络 链剖 + 堆(优先队列) / 整体二分

GDOI之后写的第一道题.看到之后没什么感觉(是我太弱,中途一度想用kpm之前在某道题上用过的链表的方法.想了想应该不可能.) 好!让我们来分析这道题吧!首先简化模型,它是要求维护树上的一些路径,支持添加和修改,要求不经过某个点的路径的最大权值(不经过某个点,我一度想到了动点分,虽然我还不会). 我们可以先考虑在链上(其实仔细一想,如果链上的你会做,那么树上的大多数情况下便是多个了链剖而已吧!)的情况.在链上,有一些区间覆盖,要求没有覆盖某个点的区间的最大权值.那么我们接着想如果询问2询问了一个

2014年北京网络赛 Instrusive HDU 5040 题解 优先队列

网赛的时候看了这道题,发现就是平常的那种基础搜索题. 由于加了一个特殊条件:可以一次消耗3秒或原地停留1秒. 那就不能使用简单的队列了,需要使用优先队列才行. 题意 告诉一副地图:一个起点,一个终点,若干墙,若干监视器,剩下的是空地. 起点,终点,监视器都算空地. 监视器初始值会指定一个方向,共有四个方向. 监视器每秒顺时针转动到下个方向. 监视器视野距离为2. 在监视器的位置或在监视器面向的格子是监视区域. 普通的移动一格需要消耗1秒时间. 在监视器下移动一格需要消耗3秒时间. 如果呆在原地不