【poj】3660 Cow Contest【floyd传递闭包】
2016-07-02 20:49
411 查看
题意:
给你一张合法拓扑图中的一些边,问你其中那些节点的rank是可以确定的,比如说给出A>C,B>C两条边,总共有ABC三个节点的话,C的位置是可以确定的,排在第三位,AB无法确定大小,故答案为1
题解:
之前有想到过一个点的入度出度之和为节点数-1的话,就成立了,但是在计算入度出度的时候,考虑到我传递关系,本来打算记录所有前驱,去重的,但感觉时间和空间复杂度过高,苦思冥想,最后还是百度了一下,看到了floyd求传递闭包这个非常神奇的概念,传递闭包是离散数学中的概念,即若<a,b>,<b,c>∈集合那么必有<a,c>∈集合,floyd真是个神奇的方法,之后就按照上面说的算下一个节点的入度出度之和是否为n-1即可
#include<cstdio>
#include<cstring>
using namespace std;
const int N=105;
bool g
;
int main()
{
int n,m,ans,a,b;
while(scanf("%d%d",&n,&m)!=EOF){
memset(g,0,sizeof(g));
while(m--){
scanf("%d%d",&a,&b);
g[a][b]=1;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(g[i][k]&&g[k][j])g[i][j]=1;
ans=0;
for(int i=1;i<=n;i++){
int ret=0;
for(int j=1;j<=n;j++)
if(g[i][j]||g[j][i])ret++;
if(ret==n-1)ans++;
}
printf("%d\n",ans);
}
return 0;
}
给你一张合法拓扑图中的一些边,问你其中那些节点的rank是可以确定的,比如说给出A>C,B>C两条边,总共有ABC三个节点的话,C的位置是可以确定的,排在第三位,AB无法确定大小,故答案为1
题解:
之前有想到过一个点的入度出度之和为节点数-1的话,就成立了,但是在计算入度出度的时候,考虑到我传递关系,本来打算记录所有前驱,去重的,但感觉时间和空间复杂度过高,苦思冥想,最后还是百度了一下,看到了floyd求传递闭包这个非常神奇的概念,传递闭包是离散数学中的概念,即若<a,b>,<b,c>∈集合那么必有<a,c>∈集合,floyd真是个神奇的方法,之后就按照上面说的算下一个节点的入度出度之和是否为n-1即可
#include<cstdio>
#include<cstring>
using namespace std;
const int N=105;
bool g
;
int main()
{
int n,m,ans,a,b;
while(scanf("%d%d",&n,&m)!=EOF){
memset(g,0,sizeof(g));
while(m--){
scanf("%d%d",&a,&b);
g[a][b]=1;
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(g[i][k]&&g[k][j])g[i][j]=1;
ans=0;
for(int i=1;i<=n;i++){
int ret=0;
for(int j=1;j<=n;j++)
if(g[i][j]||g[j][i])ret++;
if(ret==n-1)ans++;
}
printf("%d\n",ans);
}
return 0;
}
相关文章推荐
- 学习Discuz! X3.2记录:快速回复插件的最后效果动画
- DNS 原理入门
- Loading...
- 【C/C++】求最大公约数的三种方法
- mysql 根据子类id查询所有父类id
- node.js跨域请求实现和.net框架的通讯
- 学习Discuz! X3.2记录:快速回复插件,通过js使选择的下拉列表填充到回帖内容中
- AddressBook获取用户信息
- 最短路经典例题 codevs 1557 热浪
- 基于Java实现简单Http服务器
- UVa1374(快速幂)
- mysql 更具父类id 查询所有子类id
- flush tables with read lock 失效
- Category的进阶问题
- 开发常用
- android中jsoup解析html的几个例子
- PAT - 甲级 - 1007. Maximum Subsequence Sum (25)
- Matlab资料收纳
- 创建内外部文件
- linux及windows文件共享