校内OJ上的题。

数据范围非常小,用暴搜就可以,加点剪枝阶乘级别的复杂度竟然可以跑得比$O(N^4)$的算法还要快QAQ。

我用的是Floyd,参考了别人的代码。大概就是先跑个Floyd把点点之间路径处理出来,也就是从一个点到另一个点最少要经过多少点。然后设$cir[a][b]$表示,$node_a$和$node_b$在一个经过标号为2的点的环里,最少需要经过的点。

剩下的过程比较像dijkstra的流程,先把$cir[2][2]$的初值定为1。然后每次取出最小的,未被取出过的$cir[a][b]$,对于任意点$node_i$和$node_j$,可以得到$cir[i][j]=cir[a][b]+e[b][i]+e[i][j]+e[j][a]-1$,这个方程画个图就差不多能看懂。

最后$cir[1][1]$就是答案。

  1. //OJ 1832
  2. //by Cydiater
  3. //2016.10.10
  4. #include <iostream>
  5. #include <cstring>
  6. #include <cstdlib>
  7. #include <cstdio>
  8. #include <queue>
  9. #include <map>
  10. #include <ctime>
  11. #include <cmath>
  12. #include <string>
  13. #include <algorithm>
  14. #include <iomanip>
  15. using namespace std;
  16. #define ll long long
  17. #define up(i,j,n) for(int i=j;i<=n;i++)
  18. #define down(i,j,n) for(int i=j;i>=n;i--)
  19. const int MAXN=1e3+5;
  20. const int oo=0x3f3f3f3f;
  21. inline int read(){
  22. char ch=getchar();int x=0,f=1;
  23. while(ch>'9'||ch<'0'){if(ch=='-')f=-1;ch=getchar();}
  24. while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
  25. return x*f;
  26. }
  27. int N,M,e[MAXN][MAXN],cir[MAXN][MAXN],vis[MAXN][MAXN],a,b,min_cir;
  28. namespace solution{
  29. void init(){
  30. N=read();M=read();
  31. memset(e,10,sizeof(e));
  32. up(i,1,M){
  33. int x=read(),y=read();
  34. e[x][y]=1;
  35. }
  36. up(i,1,N)e[i][i]=0;
  37. }
  38. void slove(){
  39. up(k,1,N)up(j,1,N)up(i,1,N)e[i][j]=min(e[i][j],e[i][k]+e[k][j]);
  40. memset(cir,10,sizeof(cir));
  41. memset(vis,0,sizeof(vis));
  42. cir[2][2]=1;
  43. //up(i,1,N)vis[i][i]=1;
  44. while(1){
  45. a=-1;b=-1;min_cir=oo;
  46. up(i,1,N)up(j,1,N)if((cir[i][j]<min_cir&&!vis[i][j]))a=i,b=j,min_cir=cir[i][j];
  47. if(a==1&&b==1)break;
  48. vis[a][b]=1;
  49. up(i,1,N)up(j,1,N)if(a!=i&&a!=j&&b!=i&&b!=j)
  50. cir[i][j]=min(cir[i][j],cir[a][b]+e[b][i]+e[i][j]+e[j][a]-1);
  51. }
  52. cout<<cir[1][1]<<endl;
  53. }
  54. }
  55. int main(){
  56. //freopen("input.in","r",stdin);
  57. using namespace solution;
  58. init();
  59. slove();
  60. return 0;
  61. }

[COCI2012Final]Pro1的更多相关文章

  1. pro1

    #include<iostream> using namespace std; int main(void) { int i,a[],sum; cin>>i; for(i=0; ...

  2. Burp Suite Pro1.7.36破解版

    百度网盘下载(H大会一直更新):链接: https://pan.baidu.com/s/1brjPKM7 密码: 9v4r 爱盘下载:https://down.52pojie.cn/Tools/Net ...

  3. Vysor Pro1.9.3破解,连接 USB 数据线在电脑上远程控制 Android 手机平板/同步显示画面

    Vysor PRO 破解方法 1.下载Vysor Pro,   Vysor Pro下载地址 ,chrome版需要挂梯子. 下载后,能连接,但是清晰度太低,能使用的功能也很少,下面我们就开始来破解它. ...

  4. PHP设计模式(六)原型模式(Prototype For PHP)

    原型设计模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型设计模式简单的来说,顾名思义, 不去创建新的对象进而保留原型的一种设计模式. 缺点:原型设计模式是的最主要的缺点就 ...

  5. virtualbox设置共享文件夹代替sftp同步代码

    通常的开发场景: 代码放在virtualbox上运行,本地的IDE通过sftp实现和虚拟机的代码同步. 有 一个不能避免的问题是,当使用git时,如果装在virtualbox端,那么每次virtual ...

  6. ASP.NET中基本语言特性

    自动属性 public string Name { get; set; } 对象与集合的初始化 //自动推断类型//集合的初始化 var Products=new List<Product> ...

  7. jquery 操作大全

    1添加属性 $("#mydiv").attr("pro1","this is val"); $('.img1').attr('src', ' ...

  8. CentOS7 下 安装 supervisor以及使用

    CentOS7 下 安装 supervisor 以及使用 手动安装 [注] linux环境必须安装 python 1.获取supervisor包:[https://pypi.python.org/py ...

  9. PR视屏剪切

    一款常用的视频编辑软件,由Adobe公司推出.现在常用的有CS4.CS5.CS6.CC.CC 2014及CC 2015版本.是一款编辑画面质量比较好的软件,有较好的兼容性,且可以与Adobe公司推出的 ...

随机推荐

  1. jQuery经典学习笔记

    1.层次选择器: $("div> span") 获取div下的span元素 $(".one + div") 获取class为one的下一个div 2)过滤 ...

  2. Nodejs进阶:核心模块https 之 如何优雅的访问12306

    本文摘录自<Nodejs学习笔记>,更多章节及更新,请访问 github主页地址.欢迎加群交流,群号 197339705. 模块概览 这个模块的重要性,基本不用强调了.在网络安全问题日益严 ...

  3. 学习SQLite之路(三)

    20160616更新 参考: http://www.runoob.com/sqlite/sqlite-tutorial.html 1. SQLite  PRAGMA:可以用在 SQLite 环境内控制 ...

  4. ALinq Dynamic 使用指南——代码的获取与编译

    1.下载代码 ALinq Dynamic 项目托管在 CodePlex 网站,你可以使用浏览器下载压缩包,或者通过 SVN 获取. 项目网址:http://esql.codeplex.com/ 压缩包 ...

  5. angular一些冷门的用法

    1.controller的第三个参数

  6. Matlab生成M序列的伪随机码

    伪随机编码中较常用的是m序列,它是线性反馈移位寄存器序列的一种,其特点是在相同寄存器级数的情况下输出序列周期最长.线性反馈移位寄存器的工作原理是,给定所有寄存器一个初始值,当移位脉冲到来时,将最后一级 ...

  7. UITextView的使用详解

    //初始化并定义大小 UITextView *textview = [[UITextView alloc] initWithFrame:CGRectMake(20, 10, 280, 30)]; te ...

  8. mysql explain知道

     

  9. nginx启动、重启、关闭

    一.启动 cd usr/local/nginx/sbin ./nginx 二.重启 更改配置重启nginx kill -HUP 主进程号或进程号文件路径 或者使用 cd /usr/local/ngin ...

  10. 让nodeJS支持ES6的词法----babel的安装和使用

    要使用Babel, 我们需要nodeJS的环境和npm, 主要安装了nodeJS, npm就默认安装了 , 现在安装nodeJS很简单了, 直接下载安装就好了: 安装es-checker 在使用Bab ...