明天补上。。。

这道题的思路确实很精致。考虑到连的边肯定不会是一个环,所以至少有一个断点。于是,可以枚举这个断点。断点一确定,那么连边的走向也就确定了。用D【i】表示由i开始可以到达的最远点即可。对于中间被断开的点,保存[1,left],[right,n]即可。

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cmath> using namespace std;
const int N=1005;
const int P=10005;
int d[N];
struct ei{
int u,v;
}edge[P]; int main(){
int n,p,u,v;
while(scanf("%d%d",&n,&p)!=EOF){
for(int i=0;i<p;i++){
scanf("%d%d",&u,&v);
edge[i].u=min(u,v);
edge[i].v=max(u,v);
}
int mind=(1<<30);
for(int i=1;i<=n;i++){
memset(d,-1,sizeof(d));
int ans=0,pos=-1;
for(int e=0;e<p;e++){
if(edge[e].u<=i&&edge[e].v>i){
d[1]=max(d[1],edge[e].u);
d[edge[e].v]=max(d[edge[e].v],n);
ans=1;
}
else {
d[edge[e].u]=max(d[edge[e].u],edge[e].v);
}
}
for(int i=1;i<=n;i++){
if(pos==-1&&d[i]!=-1){
pos=i;
}
else{
if(d[i]!=-1){
if(i<=d[pos]&&d[i]>d[pos])
d[pos]=d[i];
else if(i>d[pos]){
ans+=d[pos]-pos;
pos=i;
}
}
}
}
ans+=d[pos]-pos;
mind=min(ans,mind);
}
printf("%d\n",mind);
}
return 0;
}

  

最新文章

  1. 密码学应用(DES,AES, MD5, SHA1, RSA, Salt, Pkcs8)
  2. AngularJS快速入门指南12:模块
  3. java反射机制一个例子
  4. elipse插件整理
  5. SaaS、PaaS和IaaS
  6. C#调用C dll,结构体传参
  7. 你真的了解try{ return }finally{}中的return?
  8. Windows命令大全
  9. Master Nginx(1) - Installing Nginx and Third-Party Modules
  10. Android L(5.0)源码之手势识别GestureDetector
  11. .htaccess 使用大全
  12. x264源代码简单分析:宏块编码(Encode)部分
  13. onConfigurationChanged方法的使用
  14. Lombok的@Data、@Setter、@Getter注解没反应问题解决
  15. 减少apk包大小的一种思路
  16. 学习笔记:jqueryui
  17. 关于npm --save还是-save的横岗数量的细节的记录
  18. 【python】模块整理
  19. Secondary NameNode究竟是做什么的
  20. js 实现图片的无缝滚动

热门文章

  1. Makefile中怎样调用python和perl文件为自己提供须要的数据
  2. zoj3822 Domination 概率dp --- 2014 ACM-ICPC Asia Mudanjiang Regional Contest
  3. B1567 [JSOI2008]Blue Mary的战役地图 二分答案+hash
  4. k8s Gitlab CI/CD 之自动编译Docker镜像并推送到指定的Registry
  5. H3BPM表单设计器公式设计参考
  6. ROS-tutorials-launch-查看日志
  7. NOIP2011 D1T1 铺地毯
  8. django URL多层路由
  9. arttemplate.js原生写法案例
  10. javascript 的逻辑中断(短路操作)