题目描述:##

数学中,假如有命题 p 一定能推出命题 q,则称 p 是 q 的充分条件,q 是 p 的必要 条件。

特别的,当 p 既是 q 的充分条件,又是 q 的必要条件时,称 p 和 q 互为 充要条件

现在有 n 个命题,其中一些是另一些的充分条件。请问有多少对命题互为 充要条件?

输入####

第一行两个正整数 n,m分别表示命题数和已知关系数

接下来 m 行,每行两个正整数 p 和 q,表示命题 p 是命题 q 的充分条件

输出####

仅一行,一个整数,表示充要条件的对数

考试T2,tarjan手癌了……(u和v什么的果然容易打错)然后没开longlong,GG了

题目分析:##

图论,tarjan

每给一组p q则从p往q连一条有向边

tarjan缩点之后每个连通分量里面的任意两个点都互为充要条件,所以tarjan里每找到一个连通分量的时候记一下这个连通分量的大小(弹栈的时候id[cnt]++),最后对于每个连通分量的大小\(k\)求一个\(C^2_k\)相加即可

代码:##

#include<bits/stdc++.h>
#define M (600000+5)
#define N (50000+5)
using namespace std;
inline int read(){
int cnt=0,f=1;char c;
c=getchar();
while(!isdigit(c)){
if(c=='-')f=-f;
c=getchar();
}
while(isdigit(c)){
cnt=cnt*10+c-'0';
c=getchar();
}
return cnt*f;
}
long long n,m,ans=0;
long long nxt[M],first[N],to[M],low[N],dfn[N],sign=0,sta[N],top=0,tot;
long long cnt,id[N];
bool insta[N];
void add(int x,int y){
nxt[++tot]=first[x];
first[x]=tot;
to[tot]=y;
}
void Dfs(int u){
low[u]=dfn[u]=++sign;
sta[++top]=u;insta[u]=1;
for(register int i=first[u];i;i=nxt[i]){
int v=to[i];
if(!dfn[v]){
Dfs(v);low[u]=min(low[v],low[u]);
}
else if(insta[v]&&dfn[v]<low[u])low[u]=dfn[v];
}
if(low[u]==dfn[u]) {
cnt++;
do{
id[cnt]++;insta[sta[top]]=0;
}while(sta[top--]!=u);
}
}
long long ask(long long x) { return ((x-1)*x)/2; }
int main(){
// freopen("logic.in","r",stdin);
// freopen("logic.out","w",stdout);
n=read();m=read();
for(register int i=1;i<=m;i++){
int x=read();int y=read();
add(x,y);
}
for(register int i=1;i<=n;i++){
if(!dfn[i])Dfs(i);
} for(register int i=1;i<=cnt;i++)
ans+=ask(id[i]);
printf("%d",ans);
return 0;
}

[WOJ2549]逻辑的连通性的更多相关文章

  1. 连通性问题--Algorithms IN C读书笔记

    近期在看<Algorithms IN C>这本书.刚開始看,读的是英文版的.感觉作者的叙述有点不太easy理解.就找了一本中文版的来看,发现还是看英文版的比較好.先看了第一章的大部分,后面 ...

  2. 七、环回接口ip地址(逻辑接口)

    loopback接口,在网络设备(一般是路由器)上是一种特殊的接口,它不是物理接口,而是一种看不见摸不着的逻辑接口(也称虚拟接口),但是对于网络设备来说却是至关重要的. 在网络设备上可以通过配置命令来 ...

  3. OVS local network 连通性分析 - 每天5分钟玩转 OpenStack(132)

    前面已经创建了两个 OVS local network,今天详细分析它们之间的连通性. launch 新的 instance "cirros-vm3",网络选择 second_lo ...

  4. 计算机程序的思维逻辑 (60) - 随机读写文件及其应用 - 实现一个简单的KV数据库

    57节介绍了字节流, 58节介绍了字符流,它们都是以流的方式读写文件,流的方式有几个限制: 要么读,要么写,不能同时读和写 不能随机读写,只能从头读到尾,且不能重复读,虽然通过缓冲可以实现部分重读,但 ...

  5. 计算机程序的思维逻辑 (54) - 剖析Collections - 设计模式

    上节我们提到,类Collections中大概有两类功能,第一类是对容器接口对象进行操作,第二类是返回一个容器接口对象,上节我们介绍了第一类,本节我们介绍第二类. 第二类方法大概可以分为两组: 接受其他 ...

  6. 你真的会玩SQL吗?之逻辑查询处理阶段

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  7. ASP.NET Core 中文文档 第四章 MVC(4.5)测试控制器逻辑

    原文: Testing Controller Logic 作者: Steve Smith 翻译: 姚阿勇(Dr.Yao) 校对: 高嵩(Jack) ASP.NET MVC 应用程序的控制器应当小巧并专 ...

  8. Linux LVM逻辑卷配置过程详解

    许多Linux使用者安装操作系统时都会遇到这样的困境:如何精确评估和分配各个硬盘分区的容量,如果当初评估不准确,一旦系统分区不够用时可能不得不备份.删除相关数据,甚至被迫重新规划分区并重装操作系统,以 ...

  9. 2000条你应知的WPF小姿势 基础篇<40-44 启动关闭,Xaml,逻辑树>

    在正文开始之前需要介绍一个人:Sean Sexton. 来自明尼苏达双城的软件工程师.最为出色的是他维护了两个博客:2,000Things You Should Know About C# 和 2,0 ...

随机推荐

  1. wxpython中控件对键盘输入无响应的可能原因

    问题描述: 开发环境:Win7 32bit + Python2.7.6 + WxPython 3.0.1-b20140707 开发某初级CAD软件中,需要实现点击TreeCtrl控件的相应选择,实现G ...

  2. MySQL(6)--复制,docker容器中

    MySQL5.7.11实现replication 启动两个安装好mysql的空的docker image ----------------- shell1  master $docker run -i ...

  3. InspectIT_EUM 实现原理概述

    在Git上查看 InspectIT 实现原理概述: 实现原理详解:  1.jsAgent如何注入到浏览器 通过ASM框架修改HttpService.service()方法,加入相关逻辑,对每一个Htt ...

  4. 直播:中国HBase技术社区第一届MeetUp

    6月6日,由中国HBase技术社区组织,阿里云主办的中国第一届HBase Meetup将在北京举行,来自阿里.小米.滴滴.360等公司的各位大神会共同探讨HBase2.0的技术革新,HBase在国内各 ...

  5. virtualbox创建centos7虚拟机

    安装Virtualbox 下载安装: 直接到官网上下载,https://www.virtualbox.org/wiki/Downloads 然后一键傻瓜式的安装即可. 设置默认虚拟电脑位置: 管理=& ...

  6. springboot和redis处理页面缓存

    页面缓存是应对高并发的一个比较常见的方案,当请求页面的时候,会先查询redis缓存中是否存在,若存在则直接从缓存中返回页面,否则会通过代码逻辑去渲染页面,并将渲染后的页面缓存到redis中,然后返回. ...

  7. JAVA 0 的突破

    使用IntelliJ Idea 开发的一个Java 处理数据文件折行的问题,整体来说功能比较简单的一个java脚本的开发,跨平台的优势可以处理windows和lunix平台的文件折行 package ...

  8. 在无代码文件的aspx文件中添加类、函数和字段的方法

    大家都知道,在开始WebForm程序时,一个WebForm由.cs代码文件与.aspx页面文件组成.在aspx文件中可以嵌入C#代码,但无法在aspx的嵌入C#代码中定义类,函数和字段等.这样,就限制 ...

  9. XMU C语言程序设计实践(4)

    以下实验二选一. 1.使用队列实现迷宫算法,找到最短路径. 2.实现顺序队列和链队列的所有基本操作,InitQueue(&Q):DestroyQueue(&Q):ClearQueue( ...

  10. uptime详解,最通俗的说明了cpu平均负载

    今天又个网友问uptime的三个平均负载值具体要怎么理解,发现要自己解释还真不知道怎么表达~~~~,下面到网上找了篇文章给大家分享:   uptime命令,有两大用处,一个是看您的机器的运行时间,另一 ...