完美网络
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<bits/stdc++.h> using namespace std; int d[10010]; int main() { int count1; int t; int n,m; int u,v; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&m); memset(d,0,sizeof(d)); count1=0; for(int i=0;i<m;i++) { scanf("%d%d",&u,&v); d[u]++; d[v]++; } priority_queue<int,vector<int>,greater<int> >que; for(int i=1;i<=n;i++) { if(d[i]<2)que.push(d[i]); } while(que.size()>=2) { u=que.top(); que.pop(); v=que.top(); que.pop(); u++; v++; count1++; if(u<2)que.push(u); if(v<2)que.push(v); } if(!que.empty())count1++; printf("%d\n",count1); } }