离散数学-传递闭包(POJ3275)
就是n的元素给定m个关系求他们之间的关系。
eg. ∵a>b and b>c ∴a>c
emmmm
若要知道n个元素的绝对关系,则需知道C(n,2)个关系。
例题:POJ3275
求法:Floyd。关系如下:
- if(g[i][k] and g[k][j]) g[i][j]=1;
但是呢,对于这个题的数据范围O(n3)的解法是肯定不行的。
于是我们用链式前向星。
- /*#include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- #include<bitset>
- #include<vector>
- using namespace std;
- inline int read()
- {
- int x=0,w=0;char c=getchar();
- while(!isdigit(c))w|=c=='-',c=getchar();
- while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
- return w?-x:x;
- }
- const int maxn=1e3+10;
- int n,m;
- bitset<maxn>g[maxn];
- int main()
- {
- n=read(),m=read();
- for(int i=1;i<=m;i++)
- g[read()][read()]=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;
- for(int i=1;i<=n;i++) if(g[i][i]){
- printf("-1\n");return 0;
- }
- int ans=0;
- for(int i=1;i<=n;i++)
- for(int j=1;j<=n;j++)
- if(!g[i][j] and !g[j][i])ans++;
- printf("%d",(ans-n)/2);
- return 0;
- }*/
- //上面是邻接矩阵
- #include<iostream>
- #include<cstdio>
- #include<algorithm>
- #include<cstring>
- #define R register
- using namespace std;
- inline int read()
- {
- int x=0,w=0;char c=getchar();
- while(!isdigit(c))w|=c=='-',c=getchar();
- while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
- return w?-x:x;
- }
- const int maxn=1100;
- int head[2][maxn],to[2][maxn],nxt[2][maxn],ecnt,n,m;
- inline void addedge(int from,int too)
- {
- to[0][++ecnt]=too,nxt[0][ecnt]=head[0][from],head[0][from]=ecnt;
- to[1][ecnt]=from,nxt[1][ecnt]=head[1][too],head[1][too]=ecnt;
- }
- bool vis[maxn][maxn];
- int main()
- {
- n=read(),m=read();
- int ans=0;
- for(R int x,y,i=1;i<=m;i++)
- {
- x=read(),y=read();
- if(!vis[x][y])
- addedge(x,y),ans++,vis[x][y]=1;
- }
- for(R int u,v,k=1;k<=n;k++)
- for(R int i=head[1][k];i;i=nxt[1][i])
- {
- u=to[1][i];
- for(R int j=head[0][k];j;j=nxt[0][j])
- {
- v=to[0][j];
- if(vis[u][v])continue;
- vis[u][v]=1;
- ans++;
- addedge(u,v);
- }
- }
- printf("%d",n*(n-1)/2-ans);
- return 0;
- }
离散数学-传递闭包(POJ3275)的更多相关文章
- 【离散数学】 SDUT OJ 传递闭包 && memset 使用注意事项
传递闭包 Time Limit: 1000 ms Memory Limit: 65536 KiB Submit Statistic Problem Description 已知有n头牛,m次战斗关系, ...
- Gym 101873D - Pants On Fire - [warshall算法求传递闭包]
题目链接:http://codeforces.com/gym/101873/problem/D 题意: 给出 $n$ 个事实,表述为 "XXX are worse than YYY" ...
- UVA 247 电话圈 (floyd传递闭包 + dfs输出连通分量的点)
题意:输出所有的环: 思路:数据比较小,用三层循环的floyd传递闭包(即两条路通为1,不通为0,如果在一个环中,环中的所有点能互相连通),输出路径用dfs,递归还没有出现过的点(vis),输出并递归 ...
- UVA 753 UNIX 插头(EK网络流+Floyd传递闭包)
UNIX 插头 紫书P374 [题目链接]UNIX 插头 [题目类型]EK网络流+Floyd传递闭包 &题解: 看了书之后有那么一点懂了,但当看了刘汝佳代码后就完全明白了,感觉他代码写的好牛逼 ...
- UVA 247 电话圈(Floyd传递闭包+输出连通分量)
电话圈 紫书P365 [题目链接]电话圈 [题目类型]Floyd传递闭包+输出连通分量 &题解: 原来floyd还可以这么用,再配合连通分量,简直牛逼. 我发现其实求联通分量也不难,就是for ...
- BZOJ-1143&&BZOJ-2718 祭祀river&&毕业旅行 最长反链(Floyed传递闭包+二分图匹配)
蛋蛋安利的双倍经验题 1143: [CTSC2008]祭祀river Time Limit: 10 Sec Memory Limit: 162 MB Submit: 1901 Solved: 951 ...
- HDU2050离散数学折线分割平面
折线分割平面 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Subm ...
- poj 2594 传递闭包+最大路径覆盖
由于路径可以有重复的点,所以需要将间接相连的点连接 #include<stdio.h> #include<string.h> #include<algorithm> ...
- 传递闭包+二进制位运算+floyd(poj2570)
Fiber Network Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 3125 Accepted: 1436 Des ...
随机推荐
- postman 获取Json 返回值的某个键值并进行断言判定
前提: 当前接口返回的结果值为json格式 1.将响应正文信息copy 到 https://www.bejson.com/ 便于查看 2.取值并进行断言编写 //json对象解析取值 var jd ...
- Reactive 理解 SpringBoot 响应式的核心-Reactor
Reactive 理解 SpringBoot 响应式的核心-Reactor bestcoding 2020-02-23 17:26:43 一.前言 关于 响应式 Reactive,前面的两篇文章谈了不 ...
- 2020想进大厂你不得不了解的MySQL意外事件的查询技巧
导读:数据库是导致应用系统运行缓慢的常见原因.面对数据库引性能问题,很多开发者或者DBA却束手无策.本文作者经过多年的实际经验,整理了一些材料,将Linux环境下MySQL性能突发事件问题排查技巧分享 ...
- Windows内核开发-Windows内部概述-1-
Windows内部概述-1- 进程: 进程是一个程序的运行实例的控制和管理对象.一般的程序员所说进程运行,这样的说法是不对的,因为进程不能运行程序,进程只能管理该程序运行.线程才是真正的执行代码的东西 ...
- ORA-00937: not a single-group group function
有时候查询会遇到如下错误 SCOTT@PROD> select deptno,sum(sal) from emp; select deptno,sum(sal) from emp ...
- C程序从编译到运行
第一篇文章 一.前言 最近在看CSAPP(深入理解计算机系统)然后以前也学过C语言,但是从来没有深究写好的C代码是怎么编译再到执行的. 所以现在自己学习,然后记录下来. 以最常用的hello worl ...
- OO unit3 summary
Unit3 JML(Java Modeling Language) 是用于对 Java 程序进行规格化设计的一种表示语言,它对于方法内部具体是如何实现的并无要求,只是对方法的接口以及行为进行限制, ...
- 喜鹊开发者(The Magpie Developer)
搬运文,原文地址:https://div.io/topic/1576 我经常感觉,开发人员很像我们所说的喜鹊,以不停的获取很多小玩意来装饰他们的窝而著称.就像喜鹊一样,开发人员通常都被定义为聪明的.好 ...
- moment常用方法
1.subtract方法,时间加减处理 console.log(moment().format("YYYY-MM-DD HH:mm:ss")); //当前时间 console.lo ...
- Vue项目的开发流程
我先安装的node.js 1.确认已安装了node.js,可在cmd中输入( node -v和npm -v),如显示出版号,说明安装成功 2.安装webpack 和webpack-cli 在全局下安装 ...