POJ 3660 Cow Contest
2015-09-08 17:59
381 查看
题意:有n个数,m个关系;接下来的关系就是表示a比b厉害,问你最后又多少个可以确定排名的了
分析:我的思路是先把他们的关系初始化为无限大,然后可以确定关系的为改为1,让后floyd,动态方程为w[i][j]=min(w[i][j],max(w[i][k],w[k][i]));最后把无限大的数变成0,最后求有多少个数是其他点到他的距离为s1,他到其他店的距离为s2, 如果s1+s2==n-1,cnt++;最后输出cnt;
分析:我的思路是先把他们的关系初始化为无限大,然后可以确定关系的为改为1,让后floyd,动态方程为w[i][j]=min(w[i][j],max(w[i][k],w[k][i]));最后把无限大的数变成0,最后求有多少个数是其他点到他的距离为s1,他到其他店的距离为s2, 如果s1+s2==n-1,cnt++;最后输出cnt;
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; const int maxm=1e3+10; const int inf=1<<29; int w[maxm][maxm]; int n,m; int main() { while(scanf("%d%d",&n,&m)!=EOF) { int i,j,k; for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { w[i][j]=inf; } } int u,v; while(m--) { scanf("%d%d",&u,&v); w[u][v]=1; } for(k=1;k<=n;k++) { for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(i!=j&&k!=j&&i!=k) { w[i][j]=min(w[i][j],max(w[i][k],w[k][j])); } } } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { if(w[i][j]==inf) { w[i][j]=0; } } } int cnt=0; for(i=1;i<=n;i++) { int sum=0; for(j=1;j<=n;j++) { if(i!=j) { sum+=(w[i][j]+w[j][i]); } } // printf("%d\n",sum); if(sum==n-1) { cnt++; } } printf("%d\n",cnt); } return 0; }
相关文章推荐
- 姿势体系结构的详细解释 -- C
- java 实现微信搜索附近人功能
- Jquery点击事件隐藏显示菜单
- IOS第一天多线程-04GCD通信
- uitableview 刷新一行
- (总结)Nginx/LVS/HAProxy负载均衡软件的优缺点详解
- 点击a链接下载附件代码
- 数字图像处理:各种变换滤波和噪声的类型和用途总结
- ajax 无刷新上传
- Callable 和Future 接口使用
- 解读Android之HttpURLConnection
- [PHP自动化-进阶]003.CURL处理Https请求访问
- 来惠普的这两周
- 使用CloudKit仪表板管理数据库
- java 代码执行cmd 返回值异常 (关于JAVA Project.waitfor()返回值是1)
- JAVA高并发学习笔记(三) JMM(Java内存模型)
- c++ 解析eps文件
- 模拟退火算法2(实例分析)--Matlab算法
- USES_CONVERSION 的陷阱
- 导入jquery.min.js文件会报错怎么办?