UVALive - 4287 Proving Equivalences

UVALive - 4287 Proving Equivalences【强连通缩点】【Tarjan算法】 题意:   给出N个命题,要求你证明这N个命题的等价性   比如有4个命题a,b,c,d,我们证明a<->b, b<->c,c<->d,每次证明都是双向的,因此一共用了6次推导 如果换成证明a->b,b->c,c->d,d->a,每次证明都是单向的,而只需4次就可以证明所有命题的等价性 现在给出M个命题证明,问还需要证明几个,才可以保证N个命题等价。 分析:   缩点后求DAG中入度为0和出度为0的联通块的较大值。 此题在刘汝佳《算法竞赛入门经典训练指南》P322 此题和POJ1236差不多 阅读详情

给定n个命题之间的已经证明的关系如 a b表示已经证明蕴含式a→b,要求还需要再作多少次证明使得所有的命题都是等价的.将每个命题看成一个点,已经证明的命题之间连一条边,问题转化为添加多少条单向边使得图成为一个强连通分量.

先求出所有的强连通分量,然后缩点构成一个SCC图,统计其中入度为0的点个数a,以及出度为0的点的个数b,max(a,b)就是需要再作的证明.注意当图一开始就是强连通时,不需要作出证明了.

来自刘汝佳算法训练指南代码:

#include <iostream>
#include <sstream>
#include <cstdio>
#include <climits>
#include <cstring>
#include <cstdlib>
#include <string>
#include <stack>
#include <map>
#include <cmath>
#include <vector>
#include <queue>
#include <algorithm>
#define esp 1e-6
#define pi acos(-1.0)
#define pb push_back
#define mp(a, b) make_pair((a), (b))
#define in  freopen("in.txt", "r", stdin);
#define out freopen("out.txt", "w", stdout);
#define print(a) printf("%d\n",(a));
#define bug puts("********))))))");
#define stop  system("pause");
#define Rep(i, c) for(__typeof(c.end()) i = c.begin(); i != c.end(); i++)
#define pragma comment(linker, "/STACK:102400000, 102400000")
#define inf 0x0f0f0f0f

using namespace std;
typedef long long  LL;
typedef vector<int> VI;
typedef pair<int, int> pii;
typedef vector<pii,int> VII;
typedef vector<int>:: iterator IT;
const int maxn = 22222;
int pre[maxn], lowlink[maxn], sccno[maxn], dfs_clock, scc_cnt;
int in0[maxn], out0[maxn];
VI g[maxn];
stack<int> S;
void dfs(int u)
{
    S.push(u);
    lowlink[u] = pre[u] = ++dfs_clock;
    for(int i = 0; i < g[u].size(); i++)
    {
        int v = g[u][i];
        if(!pre[v])
        {
            dfs(v);
            lowlink[u] = min(lowlink[u], lowlink[v]);
        }
        else if(!sccno[v])
        {
            lowlink[u] = min(lowlink[u], pre[v]);
        }
    }
    if(lowlink[u] == pre[u])
    {
        scc_cnt++;
        for(;;)
        {
            int x = S.top();
            S.pop();
            sccno[x] = scc_cnt;
            if(x == u) break;
        }
    }
}
void find_scc(int n)
{
    memset(pre, 0, sizeof(pre));
    memset(sccno, 0, sizeof(sccno));
    dfs_clock = scc_cnt = 0;
    for(int i = 0; i < n; i++)
        if(!pre[i]) dfs(i);
}
int main(void)
{in
    int n, m;
    int T;
    for(int t = scanf("%d", &T); t <= T; t++)
    {
        for(int i = 0; i < maxn; i++)
            g[i].clear();
        memset(in0, 1, sizeof(in0));
        memset(out0, 1, sizeof(out0));
        scanf("%d%d", &n, &m);
        while(m--)
        {
            int u, v;
            scanf("%d%d", &u, &v);
            u--, v--;
            g[u].pb(v);
        }
        find_scc(n);
        for(int u = 0; u < n; u++)
            for(int i = 0; i < g[u].size(); i++)
            {
                int v = g[u][i];
                if(sccno[v] != sccno[u])
                    in0[sccno[v]] = out0[sccno[u]] = 0;
            }
        int a = 0, b= 0;
        for(int i = 1; i <= scc_cnt; i++)
        {
            if(in0[i]) a++;
            if(out0[i]) b++;
        }
        int ans = 0;
        if(scc_cnt != 1) ans = max(a, b);
        printf("%d\n",ans);
    }
    return 0;
}
HBuilderx 坑 之前没问题 改了几行代码 小程序上传报分包大小超过限制 Error: 分包大小超过限制,main package source size 4199KB exceed max limit 2MB [20221213 10:08:06][wx432abdb518bdc1eb]下面的我提示是都没超过2M,却提示我超过限制,代码改了不到20行吧,之前是正常上传的.....,比如这类,要压缩的,前提是没压缩过的,但是我肯定提交的时候是压缩的,没勾选此项的要注意,如果本文解决了你的困扰 来波666不为过吧! 阅读详情

相关推荐

YOLOv11 改进策略 | HWD:引入 Haar 小波变换,减少信息丢失

在卷积神经网络(CNN)中,下采样(Downsampling)是降低特征图分辨率、扩大感受野的关键操作,通常通过最大池化(MaxPool)或步长为 2 的卷积(Strided Convolution)实现。然而,这些方法在降低分辨率的同时,往往会丢失图像中的高频细节信息(如边缘、纹理)和精确的空间位置信息,这可能对后续特征提取和目标检测精度产生不利影响,尤其是对于小目标和需要精细定位的任务。

走向CTO的路上... 1789

Proving Equivalences UVALive 4287 图的强连通分量

Consider the following exercise, found in a generic linear algebra textb o ok. Let A be an n × n matrix. Prove that the following statements are equivalent: (a) A is invertible. (b) Ax = b h

香蕉麦乐迪的博客 860

构建家庭NAS之三:在TrueNAS SCALE上安装qBittorrent

以qBittorrent为例,说明如何在TrueNAS SCALE上使用docker来安装应用。

luoqingyong的博客 7006

UvaLive-4287- Proving Equivalences

这个题是一个有向图强连通分量~,跟着书上做的~ 代码: #include #include #include #include #include using namespace std; const int maxn=40001; int n,m,dfs_clock,scc_cnt; int sccno[maxn],pre[maxn],lowlink[maxn],in[maxn],out[ma

z309241990的专栏 634

CUDA 12.1环境下的动态库链接修复:从libcusparse.so.12的undefined symbol错误到libnvJitLink.so.12的正确加载

本文详细解析了在CUDA 12.1环境下,PyTorch因libcusparse.so.12找不到libnvJitLink.so.12中的__nvJitLinkAddData_12_1符号而报错的根本原因。通过诊断动态链接过程,提供了创建符号链接、修改环境变量等三种解决方案,并深入探讨了nvJitLink组件的作用及环境配置的最佳实践,帮助开发者彻底解决此类动态库链接问题。

c8d9e0f1的博客 206

从Xilinx FPGA到MIPI DSI LCD屏:手撸代码的实战经验分享

本文分享了使用Xilinx FPGA驱动MIPI DSI LCD屏的实战经验。作者从依赖官方IP核失败,到与底层D-PHY IP缠斗,最终通过手撸代码,直接配置GTY收发器原语并实现完整的D-PHY与DSI协议栈,成功点亮屏幕。文章详细剖析了协议细节、Vivado工具链的调试技巧与避坑指南,为FPGA工程师提供了从理论到实践的宝贵参考。

weixin_29188997的博客 399

UvaLive-4287-Proving Equivalences

有向图的双联通分量,

z309241990的专栏 557

Unity工业数据可视化:基于ModbusTCP的实时数据通信实战

本文详细介绍了在Unity中实现工业数据可视化的核心方法,重点讲解了基于ModbusTCP协议与PLC等工业设备进行实时数据通信的实战流程。内容涵盖NModbus库的集成、Modbus Slave模拟器的使用、TCP连接的建立与多线程安全通信、数据读写与解析,以及如何将实时数据驱动3D场景,为构建工业数字孪生与监控系统提供完整解决方案。

ol7890123的博客 554

UVALive - 4287 - Proving Equivalences(强连通分量)

Problem UVALive - 4287 -Proving Equivalences Time Limit: 3000 mSec Problem Description Input Output Sample Input 2 4 0 3 2 1 2 1 3 ...

weixin_30618985的博客 171

告警不是闹钟:AI 如何把告警过滤成真正的“求救信号”?

告警不是闹钟:AI 如何把告警过滤成真正的“求救信号”?

Echo_Wish 241

【Flink】Flink提交任务到Yarn报错Unable to close file because the last blockBP enough number of replicas

当使用 HDFS 存储文件时,每个数据块会有多个副本分布在不同的节点上,以确保数据的可靠性和容错性。然而,由于某种原因,最后一个数据块 blk_1101776325_28036289 的副本数量不足,导致无法成功关闭文件。如果确定副本数量正确,并且问题仍然存在,可以尝试手动修复副本不足的情况。异常消息表明在关闭文件时出现问题,我的原因是hadoop上有个节点有问题,导致提交到那个节点的时候,无法传递包到相关的机器上。检查 HDFS 集群的状态,确保所有节点都正常工作,没有节点宕机或网络故障等问题。

九师兄 935

UVALive 4287 Proving Equivalences(缩点)

等价性问题,给出的样例为 a->b的形式,问要实现全部等价(即任意两个可以互相推出),至少要加多少个形如 a->b的条件。 容易想到用强连通缩点,把已经实现等价的子图缩掉,最后剩余DAG。要推出一个方案,YY后取“出度为零”和“入度为零”的点数的较大值。 理由:假定出度为零的点数较多,即是我们通常意义上的树的形式(当然,DAG是图,这里只是类比)。 根可以推出其所有子孙...

aizhengcuo9261的博客 130

6、探索音乐结构中的统一性:贝多芬《英雄交响曲》第一乐章的深度剖析

本文深入剖析了贝多芬《英雄交响曲》第一乐章的音乐结构,探讨其统一性的来源及表现形式。通过主题与动机、和声与调性、旋律与节奏、织体与动态等多方面的分析,揭示了这部作品在技术层面和情感表达上的卓越成就。

b9c0d的博客 518

UVALIVE 4287 Proving Equivalences (强连通分量+缩点)

题意:给定一个图,问至少添加多少条边可以使这个图强连通。 思路:首先求出这个图的强连通分量,然后把每一个强连通分量缩成一个点,那么这个图变成了一个DAG,求出所有点的入度和出度,因为强连通图中每个节点的入度和出度至少为1,那么我们求出入度为零的节点数量和出度为零的节点数量,答案取最大值,因为在一个DAG中添加这么多边一定可以使这个图强连通。注意当这个图本身强连通时要特判一下,答案为零。 #in

GODSPEED 853

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

UVAlive4287_Proving Equivalences

题意是告诉你有n个命题,m条递推关系,表示某个命题可以推出另外一个命题。 现在问你至少在增加多少个递推关系可以保证所有命题两两互推。 命题为点,关系为有向边,题目转化成为至少增加多少条有向边使得整个图强连通。 首先对于有向图,求出所有的联通分量,并且将所有的联通分量缩成一个点,最终得出一个无环图。 在新图里,设有A个出度为0的点,B个入度为0的点,那么我们只要保证增加max(A,...

weixin_30802171的博客 86

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

UVALIVE 4287 Proving Equivalences Tarjan求强连通分量

题目链接:https://vjudge.net/problem/UVALive-4287题意:有n个命题,已知其中的m个推导,要证明n个命题全部等价(等价具有传递性),最少还需要做出几次推导解法:由已知的推导可以建一张无向图,则问题变成了最少需要增加几条边能使图变成强连通图。找出所有的强连通分量,将每一个连通分量视作一个大节点,则整张图变成了一张DAG。设出度为0的大节点个数为a,入度为0的大节点个

I good vegetable a! 428

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Proving Equivalences UVALive - 4287(强连通分量 水题)

就是统计入度为0 的点 和 出度为0 的点 输出 大的那一个,, 若图中只有一个强连通分量 则输出0即可 和https://www.cnblogs.com/WTSRUVF/p/9301096.html 这题差不多 poj1236 #include <iostream> #include <cstdio> #include <sstream...

babing2770的博客 189

【UVALive】4287 Proving Equivalences 强连通分量

Consider the following exercise, found in a generic linear algebratextbook. Let A be an n × n matrix. Prove that the followingstatements are equivalent: A is invertible.Ax = b has exactly one solu

poursoul 937

UVAlive4287 Proving Equivalences(scc)

题目链接:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10294   【思路】        强连通分量。        求出bcc后,缩点形成DAG,设DAG上入度为0的点数为a 出度为0的点数为b,则ans=max(a,b) (互相到达,首尾相接),需要注意scc数为1的时候ans=0。   【代码】  

hahalidaxin的专栏 223

UVALive 4287 - Proving Equivalences(强连通分量)

题目: http://acm.hust.edu.cn/vjudge/contest/view.action?cid=72618#problem/C 题意: 给出n个节点的m条边的有向图,要求添加最少的边使得新的图强连通. 思路: 强连通的部分敲模版即可.找出强连通分量,将每一个强连通缩成点, 得到一个新的有向图,然后求出有a个节点的入度为0, b个节点的出度为0, 答案便是a, b的最大

Halo 643

uvaLive_4287_Proving Equivalences(缩点)

题意:就是给你一个有向图,问你至少添加多少条边,使得该图为强连通图。

一点也不二 974

UVALive - 4287 Proving Equivalences(强连通分量 + DAG)

题目大意:给出N个命题,要求你证明这N个命题的等价性比如有4个命题a,b,c,d,我们证明a<->b, b<->c,c<->d,每次证明都是双向的,因此一共用了6次推导 如果换成证明a->b,b->c,c->d,d->a,每次证明都是单向的,而只需4次就可以证明所有命题的等价性 现在给出M个命题证明,问还需要证明几个,才可以保证N个命题等价解题思路:命题的等价,就相当于证明点到点之间是互相连通。

静静地码 964

UVALive - 4287 Proving Equivalences (强连通分量)

链接 : http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=10294 题意 :  告诉你n个等价的命题 和m个关系 比如 (u,v)代表u可以推导出v, 问至少需要补充多少条边。 用强连通缩点成一张DAG。 #include #include #include #include #includ

__ElemenT 593

UVALive 4287 Proving Equivalences(强连通分量)

题目分析 这道题就是求一个图如果转化为一个强连通图,那么我们首先强连通缩点,然后整个图变成一个有向无环图,然后我们又知道强连通图所有节点的入度和出度都不为0,因此我们只需要求缩点之后的图的入度为0的点和出度为0的点的最大值即可。 #include <stack> #include <vector> #include <cstdio> #include <cstring> #include <io

你真的介意真的在乎真的想要真的渴望的话你一定能够做到 318

UVALive4287-- Proving Equivalences(SCC+Tarjan)

题目链接 题意:证明n个命题全部等价,已经给出m此推导,求至少还要几次推导才能完成整个证明。 思路:可以将命题看作结点,推导看作有向边,则本题就能转化为n个结点m条边的有向图。利用tarjan算法得到所有强连通分量,将这些强连通分量当作一个点,得到一个DAG。之后就可以求次数了。注意当强连通数量为1时,就代表着证明已经完成了。 代码: #include #incl

懒人一枚。 958

【 UVALive - 4287】Proving Equivalences (SCC缩点)

题意:   给出N个命题,要求你证明这N个命题的等价性   比如有4个命题a,b,c,d,我们证明a<->b, b<->c,c<->d,每次证明都是双向的,因此一共用了6次推导如果换成证明a->b,b->c,c->d,d->a,每次证明都是单向的,而只需4次就可以证明所有命题的等价性现在给出M个命题证明,问还需要证明几个...

weixin_30877493的博客 78
上一篇: UVALive - 5135 Mining Your Own Business
下一篇: UVA - 11324 The Largest Clique
rootial
博客等级 码龄15年 2粉丝 93原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值