光纤通信
来源:互联网 发布:如何建立网络打印机 编辑:程序博客网 时间:2024/05/11 17:06
光纤通信
来源: USACO
题目描述:
农民John 想要用光纤连通他的N (1 <= N <= 1,000)个牲口棚(编号1..N)。但是,牲口棚位于一个大池塘边,他仅可以连通相邻的牲口棚。John不需要连通所有的牲口棚, 因为只有某些奶牛之间想要彼此通讯。在保证这些奶牛通讯的情况下,他想使用最少的光纤完成通信网构件工作。给出想要通讯的成对奶牛的清单,要求求出最少需使用多少根光纤。
输入描述:
第1行: 2个整数, n 和 p (想要通讯的奶牛对数, 1<=p<=10,000)
第2..p+1行: 2个整数,描述想要通讯的两只奶牛的编号
输出描述:
仅1行,即最少使用光纤数。
样例输入:
5 2
1 3
4 5
样例输出:
3
数据范围及提示:
样例方案:连接1-2,连接2-3, 连接4-5
思路:
牛棚成环!
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int maxn=1010*2;int n,p,ans=maxn,cow[maxn][maxn];bool flag[maxn];int init()//读入优化{ int p=0;char c=getchar(); while(c<'0'||c>'9') c=getchar(); while(c>='0'&&c<='9') { p=p*10+c-'0'; c=getchar(); } return p;}int main(){ int x,y; n=init();p=init(); for(int i=1;i<=p;i++) { x=init();y=init(); if(x>y) swap(x,y); cow[x][y]=1;//x与y相连,记为1 cow[y][x+n]=1;//处理成环的情况 cow[x+n][y+n]=1;//处理成环的情况 } for(int i=1;i<=n;i++)//因为是环,枚举断点 { int tot=0; memset(flag,0,sizeof(flag)); for(int j=i;j<=i+n-1;j++)//此断点之后的一整个环 { for(int k=i+n-1;k>=j;k--)//与此断点相连的最远的一点 if(cow[j][k]) { for(int l=j;l<=k-1;l++)//从此断点到最远点的区间 if(!flag[l])//flag数组记录此点与下一个点是否相连 { flag[l]=1; tot++; } break;//最远点找完了,比它近的点就没必要找了 } } ans=min(ans,tot);//取最小 } cout<<ans;}
0 0
- 光纤通信
- 光纤通信术语
- 光纤通信原理
- 读书札记:光纤通信
- 光纤通信(Optical Fiber Communication)
- 研究生复试(光纤通信笔记)
- 数字光纤通信系统仿真软件的研究
- 光纤通信使用波长(波段)历史简述
- usaco光纤通信(并查集)
- 中国光纤通信技术现状和未来,如何发展好这个行业?
- 常用排序算法分析(C++实现)
- 类行为和线程处理
- eclipse+tomcat开发web页面遇到问题汇总
- java设计模式——装饰模式(Decorator Pattern)
- BitmapFactory的用法
- 光纤通信
- OpenCV仿射变换+投射变换+单应性矩阵
- pixhawk源码下载与编译
- 树套树之线段树套平衡树(ZOJ2112 Dynamic Rankings)
- Wordpress 网站数据库恢复记录
- 中山大学南方一号集群系统安装和使用NextGenMap
- Web网站的几个并发量级
- 计蒜客 数据结构 链表——约瑟夫环 C++
- 数位DP笔记