光纤通信(codevs 1955)
农民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<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#define N 1010
#define M 10010
using namespace std;
int a[N*][N*],vis[N*],n,m;
int read()
{
char c=getchar();int num=;
while(c<''||c>''){c=getchar();}
while(c>=''&&c<=''){num=num*+c-'';c=getchar();}
return num;
}
int main()
{
n=read();m=read();
for(int i=;i<=m;i++)
{
int x=read(),y=read();
if(x>y)swap(x,y);
a[x][y]=;
a[y][x+n]=;
a[x+n][y+n]=;
}
int ans=n;
for(int i=;i<=n;i++)//枚举将环变成链断点
{
memset(vis,,sizeof(vis));
int p=;
for(int j=i;j<=n+i-;j++)//枚举内的点
{
for(int k=n+i-;k>=j;k--)//从后向前找出和j点有关系的点
if(a[j][k])
{
for(int l=j;l<k;l++)
if(!vis[l])
{
vis[l]=;
p++;
}
break;//因为是从后向前找的,所以只找一次
}
}
ans=min(ans,p);
}
printf("%d\n",ans);
return ;
}
光纤通信(codevs 1955)的更多相关文章
- codevs 3289 花匠
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1285 二叉查找树STL基本用法
C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1228 苹果树 树链剖分讲解
题目:codevs 1228 苹果树 链接:http://codevs.cn/problem/1228/ 看了这么多树链剖分的解释,几个小时后总算把树链剖分弄懂了. 树链剖分的功能:快速修改,查询树上 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- codevs 1052 地鼠游戏
1052 地鼠游戏 http://codevs.cn/problem/1052/ 题目描述 Description 王钢是一名学习成绩优异的学生,在平时的学习中,他总能利用一切时间认真高效地学习,他不 ...
- codevs 2830 蓬莱山辉夜
2830 蓬莱山辉夜 http://codevs.cn/problem/2830/ 题目描述 Description 在幻想乡中,蓬莱山辉夜是月球公主,居住在永远亭上,二次设定说她成天宅在家里玩电脑, ...
随机推荐
- Multitenant best Practice clone pdb seed and Clone a Pluggable Database – 12c Edition
1. 1.Tnsnames when connecting to either Container or Pluggable instance The tnsnames.ora should be c ...
- 215 Kth Largest Element in an Array 数组中的第K个最大元素
在未排序的数组中找到第 k 个最大的元素.请注意,它是数组有序排列后的第 k 个最大元素,而不是第 k 个不同元素.例如,给出 [3,2,1,5,6,4] 和 k = 2,返回 5.注意事项:你可以假 ...
- Java基础教程(24)--集合
一.Java集合框架 集合,有时也称为容器,是一个用来存储和管理多个元素的对象.Java中的集合框架定义了一套规范,用来表示和操作集合,使具体操作与实现细节解耦.集合框架都包含下列内容: 接口:这 ...
- visual assist x 注释配置
/******************************************************************** created: $DATE$ created: $DAY$ ...
- 解决max解析记录与cname不能共存的问题
问题描述: 在腾讯上做了域名邮箱解析,需要将max记录绑定到主机记录为@(即空)的记录下. 而在做域名解析的时候,为了方便,需要将不带3w的域名也要解析到主机记录为@(即空)的记录下. 因此,解析报错 ...
- PHP面向对象考察点
面向对象三大特性 封装 封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节,包含两个含义: 把对象的全部属性和全部服务结合在一起,形成一个不可分割的独立单位(即对象). ...
- github修改仓库项目的语言类型
github是 采用Linguist来自动识别你的代码应该归为哪一类. 解决方法: 我们可以在仓库的根目录下添加.gitattributes文件: ## 使用 `.gitattributes` 配置文 ...
- leetcode_Counting Bits_dp
给定num,用O(num)的时间复杂度计算0--num中所有数的二进制表示中1的个数. vector<int> countBits(int num) { vector<,); ;i& ...
- mysql 修改表的字段
修改一个表的字段 ALTER TABLE `member` CHANGE `memberid` `memberid` bigint unsigned; 修改含有外键的字段 -- 执行 begin 到 ...
- GET方法与POST方法的区别
区别一:get重点在从服务器上获取资源,post重点在向服务器发送数据: 区别二:get传输数据是通过URL请求,以field(字段)= value的形式,置于URL后,并用"?" ...