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;
}
LightTools宏 vs Python API:光学仿真自动化方案选型指南 本文深入对比了LightTools光学仿真自动化中VBA宏与Python API两种方案。VBA宏内嵌易用,适合固定流程批处理;Python API生态强大,尤其在参数优化算法集成方面优势显著,便于构建复杂工作流。文章结合案例,为不同场景下的技术选型提供清晰指南。 阅读详情

相关推荐

手把手教你用SpringBoot+Vue3+Docker从零搭建一个在线OJ系统(附完整源码)

本文详细介绍了如何使用SpringBoot、Vue3和Docker从零搭建一个在线OJ系统,涵盖前后端开发、判题机实现及Docker容器化部署。通过完整的源码和实战步骤,帮助开发者掌握OJ系统的核心架构与关键技术,适用于算法训练、编程竞赛等场景。

weixin_42648844的博客 297

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

Ubuntu18.04 SoftRoCE安装教程

目标:创建两台Ubuntu18.04虚拟机,安装SoftRoCE环境,一台作为Server,一台作为Client,模拟RDMA通信环境,熟悉RDMA的通信方式。

GGGYL111的博客 1548

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

深入解析Uplift模型评估:AUUC指标的计算与应用

本文深入解析了Uplift模型评估的核心指标AUUC。针对传统响应模型无法区分用户真实转化动因的痛点,AUUC通过量化模型对用户增益(Uplift)的排序能力,有效衡量营销干预的增量收益。文章详细拆解了AUUC的计算逻辑,从构建Qini曲线到Python代码实战,并强调了其在预算约束下的精准营销等场景的应用价值与常见陷阱。

weixin_29254029的博客 475

github创建账号第一步始终出错

github创建账号总结:第一次注册GitHub,填好用户名邮箱密码后进入下一步就卡在哪里,上面还提示Unable to verify your captcha response等,进入网址的解决办法以及下载其他的浏览器也无法解决,用手机浏览器抱着试一试的心态竟然成功了,分享给大家。手机下载谷歌浏览器,进入GitHub正常注册,能向下继续,邮箱验证完以后再用电脑登陆就ok啦

计算机毕业论文源码,学生个人网页制作html源码。贴近用户做网络推广和互联网优化。 4376

UvaLive-4287-Proving Equivalences

有向图的双联通分量,

z309241990的专栏 557

基于YOLOv8的铁路轨道异物检测系统设计与实现

目标检测是计算机视觉领域的核心任务之一,旨在识别图像中特定目标的位置和类别。传统方法主要依赖手工特征(如HOG、SIFT等)和分类器(如SVM),而深度学习方法通过卷积神经网络自动学习特征表示,显著提升了检测性能。YOLO(You Only Look Once)系列算法作为单阶段目标检测的代表,以其高效的检测速度著称。YOLOv8是Ultralytics公司于2023年发布的最新版本,在精度和速度上都有进一步提升。

YOLO 574

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

地平线J6的基础简介

地平线J6M芯片:面向中阶辅助驾驶市场的高性价比芯片

weixin_43084908的博客 4458

【时时三省】tessy 进入调试模式 教程

山不在高,有仙则名。水不在深,有龙则灵。----优快云 时时三省。

时时三省的博客 771

UVALive 4287 Proving Equivalences(缩点)

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

aizhengcuo9261的博客 130

Qt Quick/QML入门到精通_专栏demo对应文章目录(目前50个左右demo/长期更新)

自定义图标下拉列表框的效果如下所示:自定义三态按钮的效果如下所示:传送门:53.qt quick-自定义三态按钮、自定义图标下拉列表框_诺谦的博客-优快云博客传送门:59.qt quick-qml调色板(颜色取色器)实现、自定义QQuickStyle样式_诺谦的博客-优快云博客63.qt quick-QML侧边滑动栏(不需要任何图片资源,支持自定义左右方向和大小)_诺谦的博客-优快云博客_qt实现好看侧边栏。...

抵抗时间扭曲,坚持做一件有意义的事 2万+

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

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

GODSPEED 853

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

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

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

UVAlive4287_Proving Equivalences

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

weixin_30802171的博客 86

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

UVALIVE 4287 Proving Equivalences Tarjan求强连通分量

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

I good vegetable a! 428

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

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、付费专栏及课程。

余额充值