题意:有n个铁环用长度均为1的绳子连起来(不会有重边)。试图拿起两个铁环并在水平方向拉直,那么会有一些边会被拉直(可想而知有些绳子不会被拉直而是弯曲的),那么取哪两个铁环并拉直,能使被拉直的直线最多呢?输出最多的边数

这题其实是最短路,而且通过这题可以帮助我们更形象地理解最短路的实质尤其理解松弛操作

当两个点a,b被拉直,那么其实那些被拉直的边就是最短路径(从a出发到b,或者反过来也行,因为是无向图),也就是说,要找到所有的最短路径并统计有多少条不同的边(因为不同的最短路径可能共用相同的边),那么就是这两点的数目,我们只要枚举任意两个点被拉直时不同边的数目,并找到最大的那个就可以了。

所以要先知道任意两个点的最短路,floyd,然后就是dfs搜索所有可能的边,dfs搜索的时候直接使用floyd之后的d数组,并且这个我写的这个dfs感觉有点像DP记忆化搜索,因为当初想这个问题的时候就想到找不同的边用DP去做,但没想出来,然后YY了一个DFS,WA了几次终于是过,才发现挺像记忆化搜索的

直接看代码的注释吧

#include <cstdio>
#include <cstring>
#define INF 0x3f3f3f3f
#define N 130
int d[N][N],vis[N][N];
int n,m,ccount,max;void input()
{scanf("%d%d",&n,&m);memset(d,0x3f,sizeof(d));for(int i=1; i<=m; i++){int u,v;scanf("%d%d",&u,&v);d[u][v]=d[v][u]=1;}return ;
}
void floyd()
{for(int k=0; k<n; k++)for(int i=0; i<n; i++)for(int j=0; j<n; j++){if(d[i][k]+d[k][j]<d[i][j])d[i][j]=d[i][k]+d[k][j];}for(int i=0; i<n; i++) d[i][i]=0;return ;
}
void dfs(int sp,int len,int t ,int u) //sp为最短路值,len为当前找到的长度,t是终点,u是当前的点
{if(u==t) return ;for(int v=0; v<n; v++) if(v!=u && d[u][v]==1 && !vis[u][v])if(len+d[u][v]+d[v][t]==sp){ccount++;vis[u][v]=vis[v][u]=1;dfs(sp,len+d[u][v],t,v);}return ;
}
void solve()
{max=0;for(int s=0; s<n; s++)  //枚举所有的起点和终点for(int t=s+1; t<n; t++) //因为是无向图,所以j=s+1开始
        {memset(vis,0,sizeof(vis));ccount=0;if(d[s][t]==1)  //某些最短路直接相连为1,不用搜索直接判断{ if(max<1) max=1; continue; }dfs(d[s][t],0,t,s);//printf("顶点%d  %d:%d\n",s,t,ccount);if(ccount>max)max=ccount;}
}
void print_graph()
{for(int i=0; i<n; i++){for(int j=0; j<n; j++)printf("%d ",d[i][j]);printf("\n");}
}
int main()
{int T;scanf("%d",&T);for(int c=1; c<=T; c++){input();//print_graph();
        floyd();//print_graph();
        solve();printf("Case #%d: %d\n",c,max);}return 0;
}

uva 10985 Rings'n'Ropes相关推荐

  1. 提取了下刘汝佳推荐的题号...

    今天闲来没事上uva oj提取了下刘汝佳推荐的acm题号,原始数据如下: Volume 0. Getting Started    10055 - Hashmat the Brave Warrior ...

  2. 《题目与解读》红书 训练笔记目录《ACM国际大学生程序设计竞赛题目与解读》

    虽然2012年出版的老书了,但是是由三次世界冠军的上海交大ACM队出版的书籍,选择的题目是ACM经典中的经典,书中有非常详细的题解,可以学到很多东西,值得一刷. 目录 第一部分 第一章 数学 1.1 ...

  3. π-Algorithmist分类题目(2)

    原题网站:Algorithmist,http://www.algorithmist.com/index.php/Main_Page π-Algorithmist分类题目(2) Set Theory U ...

  4. 初学者acm的练习题指南

    上机练习题参考题 忘了在哪找的啦~~希望对大家有帮助呦 <!--[if !supportLists]-->1.    <!--[endif]-->Programming Bas ...

  5. UVa Online Judge 工具網站

    UVa Online Judge 工具網站 转自http://www.csie.ntnu.edu.tw/~u91029/uva.html Lucky貓的ACM園地,Lucky貓的 ACM 中譯題目 M ...

  6. [搜索]UVa 129 困难的串

    题意:将一个包含两个相邻的重复子串的子串,称为"容易的串",其他为"困难的串". 输入正整数n和l,输出由前l个字符组成的,字典序第n小的困难的串. 输入样例: ...

  7. uva 401.Palindromes

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  8. Uva 3767 Dynamic len(set(a[L:R])) 树套树

    Dynamic len(set(a[L:R])) Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 https://uva.onlinejudge.org/in ...

  9. UVA 11752 超级幂

    UVA 11752 超级幂 Z - The Super Powers Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & ...

最新文章

  1. 新的sublime text已经上传网盘,地址写在下面
  2. was not found on the Java Build Path
  3. QOTD:Java线程与Java堆空间
  4. 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)
  5. 字符设备驱动高级篇1——新接口介绍
  6. dataset__getitem___【小白学PyTorch】3.浅谈Dataset和Dataloader
  7. Stanley-系列三
  8. mysql 删除表时外键约束_MySQL删除表的时候忽略外键约束的简单实现
  9. 我的2017之一只混迹于小城市的.net程序猿
  10. ESP8285调试 IOT_Demo
  11. 为了开发世嘉MD游戏我写了个Tile地图编辑器
  12. [PAT A1013]Battle Over Cities
  13. 将一个文件夹下的MP4文件合并为一个
  14. 移动端 click 300ms 延迟,如何解决
  15. 【C语言练习——打印上三角及其变形(带空格版)】
  16. 日语生可以选计算机专业吗,高考日语生,不建议你大学报日语专业!
  17. python多功能文本编辑器_Python GUI文本编辑器
  18. 如何将项目代码放到github上
  19. 2020焊工(高级)考试题及焊工(高级)考试软件
  20. Stable Diffusion使用入门教程

热门文章

  1. 洛谷P1333 瑞瑞的木棍(欧拉回路)
  2. 个人博客 V0.0.3 版本 ...
  3. zznu 1996 : 正三角形和圆的爱情
  4. Maven入门详解以及Eclisp的集成
  5. Asp: 解决脚本输出网页出现乱码情况
  6. Mac OS 看机起动JIRA
  7. WinAPI: midiOutClose - 关闭输出设备
  8. 手把手教你用ECharts画柱状图
  9. 深入理解Java中的volatile关键字
  10. webx学习(二)——Webx Framework