Floyd + 传递闭包
一,Floyd核心:
for (int k = 1; k <= n; k++) {//n为节点个数for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {if (dis[i][k] + dis[k][j] > dis[i][j])dis[i][j] = dis[i][k] + dis[k][j];}}
}
二、传递闭包
题意:第一行表示有n个人m场比赛,后面m行每行有A B,表示A打败的B,问最后能够确定排名的人数有多少。
思路:判断一个人的排名是否确定,只要他与其余n-1个人的关系确定即可。这里涉及到了传递,如A打败了B,B打败了C,那么A间接打败了C。
这里跟floyd算法的思想是一样的,不同的是,floyd求得是最短路,if里更新的距离,这里是判断关系,不需要距离更新。
我们创建一个数字s,s[i][j]表示i打败了j,具体代码如下:
#include<iostream>
#include<stdio.h>
using namespace std;
const int maxn = 100 + 5;
typedef long long LL;int s[maxn][maxn];
int n, m;void floyd() {for (int i = 1; i <= n; i++) {for (int j = 1; j <= n; j++) {for (int k = 1; k <= n; k++) {if (s[j][i] && s[i][k])s[j][k] = 1;}}}
}int main() {while (scanf("%d %d", &n, &m) != EOF) {memset(s, 0, sizeof(s));for (int i = 1; i <= m; i++) {int a, b;scanf("%d %d", &a, &b);s[a][b] = 1;}floyd();int sum = 0;int t = 0;for (int i = 1; i <= n; i++) {t = 0;for (int j = 1; j <= n; j++) {if (s[i][j] || s[j][i]) t++;}if (t == n - 1)sum++;}cout << sum << endl;}system("pause");return 0;
}
Floyd + 传递闭包相关推荐
- POJ 3660 Cow ContestCow(Floyd传递闭包)题解
题意:给出m个关系,问你能确定机头牛的排名 思路:要确定排名那必须要把他和其他n-1头牛比过才行,所以Floyd传递闭包,如果赢的+输的有n-1就能确定排名. 代码: #include<cstd ...
- POJ 3275 Ranking the Cows (floyd传递闭包)
Ranking the Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 2248 Accepted: 1045 ...
- POJ - 1094 Sorting It All Out(拓扑排序+floyd传递闭包)
题目链接:点击查看 题目大意:给出N个点以及M个比较关系,问在第几个数字可以确定出唯一的序列,或者判断出矛盾的序列,或者最后也无法确定出一个唯一的序列 题目分析:关于这个题目可以直接分类讨论,可以直接 ...
- POJ1683 Puzzlestan ——Floyd传递闭包+Dfs
好久没写Dfs了,拿来练手. WA了一次,没有判断中间的情况-- 解法:先用Floyd传递闭包处理哪些点一定要在一起.哪些点一定不能在一起,六重循环. 然后深搜,res[i][j]表示1,i这个物品在 ...
- 【POJ - 2594】Treasure Exploration(floyd传递闭包 + 最小路径覆盖,图论)
题干: Have you ever read any book about treasure exploration? Have you ever see any film about treasur ...
- CIA3 NOI接站(tarjan缩环+Floyd传递闭包+可相交最小路径覆盖)
可以发现,题目求得就是一个可相交最小路径覆盖,但是有环.所以我们先用tarjan把环都缩掉,然后Floyd传递闭包,求二分图最大匹配,答案就是scc-ans. #include <cstdio& ...
- H - Cow Contest POJ - 3660(Floyd 传递闭包)
H - Cow Contest POJ - 3660 题意: 有 n 头牛比赛,边 1 -> 2 代表 1 能赢 2 ,给你 m 条边,问能确定出多少头牛的名次? 思路: 如果 1->2 ...
- 【BZOJ5335】【TJOI2018】—智力竞赛(floyd传递闭包+二分图匹配)
传送门 可以二分变成直接求最大链覆盖,因为可以重复经过一个点 floydfloydfloyd传递闭包就可以了 #include<bits/stdc++.h> using namespace ...
- uva 247(floyd传递闭包)
为什么,逗号后面,还有空格........ #include <iostream> #include <cstring> #include <algorithm> ...
- 【图论专题】Floyd算法及其扩展应用
Floyd的拓展应用: 任意两点最短路 传递闭包 找最小环 恰好经过k条边的最短路(倍增) 题目列表: 题目 算法 AcWing 1125. 牛的旅行 任意两点最短路Floyd AcWing 343. ...
最新文章
- 《术以载道——软件过程改进实践指南》—第1章1.1节对CMMI的基本认识
- Android CursorAdapter
- ZooKeeper入门(五)配置集群和选举机制
- 电子徽章:融创意、疯狂与电子设计中
- 【ASP.NET Core】处理异常
- IME输入法编程心得
- 2017年3月21日
- jQuery~函数封装记1
- scrum 12.8
- 广西农业职业技术学院计算机,学科分类与代码-广西农业职业技术学院.doc
- ei会议论文含金量高吗?
- 昵图网显示内部服务器错误,为什么博客老是显示网页错误?无法正常打开
- 互联网教育已过时,教育科技才是未来的趋势
- dismiss all popup view
- discord验证无法通过_如何通过Discord的“上线”直播
- LinuxStudyNote(29)-Linux常用命令(6)-压缩解压命令汇总gzip、gunzip、tar、zip、unzip、bzip2、bunzip2
- dialog设置最大高度占比
- 基于java与sqlserver2008的班级信息管理系统源代码,图书管理系统课程设计报告(基于JAVA和SQL.Server).doc...
- 电商API:拍立淘图片搜索
- 虾扑:shopee虾皮怎么上传宝贝
热门文章
- java基于教务系统管理总结_基于JAVA的教务管理系统的设计与实现
- Visio Professional 2019 激活方法详解
- Vscode新建vue模板
- 医护人员计算机专业培训内容,电子病历-住院医生工作站的前期培训
- Windows 软件管理
- 如何把电视盒子做成游戏机? —— 破解电视IPTV盒子(Skyworth E900-S)
- python3.7安装pyltp出错_python安装pyltp包
- 微信小程序直播插件live-player-plugin使用
- 【OTT】国内主要OTT平台背后的那些CDN服务商
- php报修小程序,微信小程序报修管理系统