Fiber Communications
Time Limit: 1000MS   Memory Limit: 30000K
Total Submissions: 4236   Accepted: 1276

Description

Farmer John wants to connect his N (1 <= N <= 1,000) barns (numbered 1..N) with a new fiber-optic network. However, the barns are located in a circle around the edge of a large pond, so he can only connect pairs of adjacent barns. The circular configuration
means that barn N is adjacent to barn 1. 



FJ doesn't need to connect all the barns, though, since only certain pairs of cows wish to communicate with each other. He wants to construct as few 

connections as possible while still enabling all of these pairs to communicate through the network. Given the list of barns that wish to communicate with each other, determine the minimum number of lines that must be laid. To communicate from barn 1 to barn
3, lines must be laid from barn 1 to barn 2 and also from barn 2 to barn 3(or just from barn 3 to 1,if n=3).

Input

* Line 1: Two integers, N and P (the number of communication pairs, 1 <= P <= 10,000) 



* Lines 2..P+1: two integers describing a pair of barns between which communication is desired. No pair is duplicated in the list. 

Output

One line with a single integer which is the minimum number of direct connections FJ needs to make.

Sample Input

5 2
1 3
4 5

Sample Output

3

Hint

[Which connect barn pairs 1-2, 2-3, and 4-5.] 

题意是给你1到N这么多的点,要求有P次连接,将P次连接中给的点连接起来,举例比如说1到3要连接有两种连接方法,1-2-3或者1-5-4-3。求满足所有连接中最少需要多少个线段连接。

真没想到暴力竟然还能n*n这么暴。。。看了别人的想法之后,觉得精彩的地方第一点在于如果i 到i+1这个线段是断了的话,而要求连接的线段又恰好在这之间,(即只有一种方法将之连接,逆过去连接),这种时候的做法是将to[1]=start,to[end]=N+1,分成两段来想,还避免了那个断了的影响,觉得这种想法真是赞啊!!!

还有一点是to数组的使用比我之前想象的简单多了,to[i]表示从i开始到to[i]已经连接上了,如果等于0直接pass掉,这样一个一个枚举也很简单方便。

还有一点是duandian表示当前能够到达的最远的点,这里的使用也很赞。

这三点真的值得我去好好研磨。

代码:

#include <iostream>
#include <vector>
#include <algorithm>
#include <cmath>
#include <string>
#include <cstring>
using namespace std; struct node
{
int start;
int end; }node_one[10005]; bool cmp(node node1,node node2)
{
if(node1.start == node2.start)
return node1.end< node2.end; return node1.start<node2.start;
} #define INF 0x3f3f3f3f int N,P,i,j,Q1,Q2,Qmin,Qmax,ans,h;
int to[1005]; int main()
{
cin>>N>>P;
for(i=1;i<=P;i++)
{
cin>>Q1>>Q2;
node_one[i].start = min(Q1,Q2);
node_one[i].end = max(Q1,Q2);
}
sort(node_one+1,node_one+P+1,cmp); ans=INF; for(i=1;i<=N;i++)
{
memset(to,0,sizeof(to));
for(j=1;j<=P;j++)
{
if(node_one[j].end>=i+1 && node_one[j].start<=i)
{
to[1]=max(to[1],node_one[j].start);
to[node_one[j].end]=N+1;
}
else
{
to[node_one[j].start]=max(to[node_one[j].start],node_one[j].end);
}
}
int duandian=0,result=0;
for(j=1;j<=N;j++)
{
if(to[j]==0)continue;
if(to[j]>duandian)
{
if(j>=duandian)
{
result+=(to[j]-j);
}
else
{
result+=(to[j]-duandian);
}
duandian=to[j];
}
}
ans=min(ans,result);
}
cout<<ans<<endl; return 0;
}

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

POJ 1944:Fiber Communications的更多相关文章

  1. [USACO2002][poj1944]Fiber Communications(枚举)

    Fiber Communications Time Limit: 1000MS   Memory Limit: 30000K Total Submissions: 3804   Accepted: 1 ...

  2. POJ1944 Fiber Communications (USACO 2002 February)

    Fiber Communications 总时间限制:  1000ms 内存限制:  65536kB 描述 Farmer John wants to connect his N (1 <= N ...

  3. TOJ1550: Fiber Communications

    1550: Fiber Communications  Time Limit(Common/Java):1000MS/10000MS     Memory Limit:65536KByteTotal ...

  4. POJ 3321:Apple Tree + HDU 3887:Counting Offspring(DFS序+树状数组)

    http://poj.org/problem?id=3321 http://acm.hdu.edu.cn/showproblem.php?pid=3887 POJ 3321: 题意:给出一棵根节点为1 ...

  5. POJ 3252:Round Numbers

    POJ 3252:Round Numbers Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10099 Accepted: 36 ...

  6. POJ 1944 - Fiber Communications

    原题地址:http://poj.org/problem?id=1944 题目大意:有n个点排成一圈,可以连接任意两个相邻的点,给出 p 对点,要求这 p 对点必须直接或间接相连,求最少的连接边数 数据 ...

  7. POJ 1944 Fiber Communications (枚举 + 并查集 OR 线段树)

    题意 在一个有N(1 ≤ N ≤ 1,000)个点环形图上有P(1 ≤ P ≤ 10,000)对点需要连接.连接只能连接环上相邻的点.问至少需要连接几条边. 思路 突破点在于最后的结果一定不是一个环! ...

  8. POJ 1027:The Same Game 较(chao)为(ji)复(ma)杂(fan)的模拟

    The Same Game Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 5168   Accepted: 1944 Des ...

  9. POJ 1459:Power Network(最大流)

    http://poj.org/problem?id=1459 题意:有np个发电站,nc个消费者,m条边,边有容量限制,发电站有产能上限,消费者有需求上限问最大流量. 思路:S和发电站相连,边权是产能 ...

随机推荐

  1. js 用于运行string中的<script>和</script>之间的函数

    /** * Created by 炜文 on 2017/2/15. */ var intext = '485222<script> var i=2;var j=2;console.log( ...

  2. stm32 解析sbus

    转载 https://blog.csdn.net/Brendon_Tan/article/details/89854751 STM32 Futaba SBUS协议解析1. S.BUS1.1 协议介绍 ...

  3. jquery使用css函数设置背景色无效解决办法

    外部的css样式为: #imageArea{ width: 200px; height: 300px; background-color: #eee !important; } 通过 以下代码来修改其 ...

  4. ch8 faux列

    在一个布局中,假设有导航元素和内容元素,切给他们都分别应用了背景,理想情况下,背景应该拉长到整个布局的最大高度,从而形成列的效果,但是实际上,因为导航元素没有扩展到最大高度,所以它们的背景不会拉长,如 ...

  5. linux--redis学习

    redis redis在linux的安装 1.redis安装方式 yum安装(提前配置好yum源) yum install redis -y # 源代码编译安装 rpm包手动安装 2.编译安装redi ...

  6. 嵊州普及Day4T2

    题意:有一个单行走廊,每回合第ai个展柜会冒出来一只鬼,右边尽头有一个人间大炮和向最左传送门(费用均1金币),你需要每回合将所有鬼交换展柜,全部至最右,问若从一到n所有回合结束是需多少金币可射死所有鬼 ...

  7. Day2:接着思考和可能的策划

    今天早上闹钟还没响呢,老婆就把我叫醒了~说有规律宫缩了! 7点到8点记录了一个小时,宫缩差不多5~6分钟一次! 赶紧收拾东西上医院!正好今天是40周的产检,今天还是预产期! 这孩子终于肯出来了! 结果 ...

  8. mysql5.7.26安装

    h https://www.cnblogs.com/zgqbky/p/11699282.html 张国强(明了) tar -xf mysql-5.7.26-1.el7.x86_64.rpm-bundl ...

  9. 使用自己定义的DIV的滚动条

    基本思路: 让DIV浮动起来,利用postion:fixed/absolute,设定height:100% var $card=$("#cardDetail");      $ca ...

  10. 【题集】k倍区间(抽屉原理)

    例1:http://lx.lanqiao.cn/problem.page?gpid=T444 蓝桥杯 问题描述 给定一个长度为N的数列,A1, A2, ... AN,如果其中一段连续的子序列Ai, A ...