poj Going from u to v or from v to u? 强联通缩点+拓扑排序(或搜索)

方法一

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1024;
struct Edge
{int s,t;
};
int n,m,dfn[N],low[N],in[N],id[N],cnt,dep,mp[N][N];
vector<Edge>edge;
vector<int>g[N];
stack<int>st;void Addedge(int u,int v)
{Edge tp;tp.s=u,tp.t=v;edge.push_back(tp);g[u].push_back(edge.size()-1);
}void dfs(int u)
{int v,i,k,mx=dfn[u]=low[u]=dep++;st.push(u);for(i=0;i<g[u].size();i++){v=edge[g[u][i]].t;if(dfn[v]==-1) dfs(v);if(mx>low[v]) mx=low[v];}if(mx<low[u]){low[u]=mx;return ;}//printf("%d\n",cnt);do{k=st.top();st.pop();id[k]=cnt;low[k]=n;}while(k!=u);cnt++;
}void dfs1(int u,int q)
{dfn[u]=1;dep=max(dep,q);for(int i=0;i<cnt;i++){if(mp[u][i]==1)dfs1(i,q+1);}
}
int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int _,i,u,v;scanf("%d",&_);while(_--){scanf("%d%d",&n,&m);for(i=0; i<n; i++){g[i].clear();id[i]=i;}edge.clear();for(i=0; i<m; i++){scanf("%d%d",&u,&v);Addedge(u-1,v-1);}dep=0;cnt=0;while(!st.empty()) st.pop();memset(dfn,0xff,sizeof(dfn));for(i=0; i<n; i++){if(dfn[i]==-1)dfs(i);}memset(in,0,sizeof(in));memset(mp,0,sizeof(mp));for(i=0; i<m; i++){u=id[edge[i].s];v=id[edge[i].t];//printf("%d %d\n",u,v);if(u!=v){in[v]++;mp[u][v]=1;}}memset(dfn,0,sizeof(dfn));for(i=0,dep=0;i<cnt;i++){if(dfn[i]==0) dfs1(i,1);}if(dep==cnt) printf("Yes\n");else printf("No\n");}return 0;
}

方法二

#include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <string>
#include <math.h>
#include <stdlib.h>
#include <time.h>
//#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1024;
struct Edge
{int s,t;
};
int n,m,dfn[N],low[N],in[N],id[N],cnt,dep,mp[N][N];
vector<Edge>edge;
vector<int>g[N];
stack<int>st;void Addedge(int u,int v)
{Edge tp;tp.s=u,tp.t=v;edge.push_back(tp);g[u].push_back(edge.size()-1);
}void dfs(int u)
{int v,i,k,mx=dfn[u]=low[u]=dep++;st.push(u);for(i=0;i<g[u].size();i++){v=edge[g[u][i]].t;if(dfn[v]==-1) dfs(v);if(mx>low[v]) mx=low[v];}if(mx<low[u]){low[u]=mx;return ;}//printf("%d\n",cnt);do{k=st.top();st.pop();id[k]=cnt;low[k]=n;}while(k!=u);cnt++;
}int topsort()
{int i,u,v,p;stack<int>S;for(i=0;i<cnt;i++){//printf("%d\n",in[i]);if(in[i]==0)S.push(i);}//printf("%d\n",S.size());p=0;while(S.size()==1){u=S.top();S.pop();p++;for(i=0;i<cnt;i++){if(mp[u][i]==1){in[i]--;if(in[i]==0) S.push(i);}}}if(p==cnt) return 1;else return 0;
}int main()
{//freopen("in.txt","r",stdin);//freopen("out.txt","w",stdout);int _,i,u,v;scanf("%d",&_);while(_--){scanf("%d%d",&n,&m);for(i=0; i<n; i++){g[i].clear();id[i]=i;}edge.clear();for(i=0; i<m; i++){scanf("%d%d",&u,&v);Addedge(u-1,v-1);}dep=0;cnt=0;while(!st.empty()) st.pop();memset(dfn,0xff,sizeof(dfn));for(i=0; i<n; i++){if(dfn[i]==-1)dfs(i);}memset(in,0,sizeof(in));memset(mp,0,sizeof(mp));for(i=0; i<m; i++){u=id[edge[i].s];v=id[edge[i].t];if(u!=v&&!mp[u][v]){in[v]++;mp[u][v]=1;}}if(topsort()) printf("Yes\n");else printf("No\n");}return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。http://xiang578.top/

转载于:https://www.cnblogs.com/xryz/p/4847783.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/431376.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php搭建的网站空白,使用phpstudy搭建dedecms网站后台页面空白解决方法

这篇文章主要为大家详细介绍了使用phpstudy搭建dedecms网站后台页面空白解决方法&#xff0c;具有一定的参考价值&#xff0c;感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。在把 phpStudy升级到2013版后&#xff0c;在登录本地织梦dedecms5.7时&#xff0c…

运维工程师绩效考核表_IT运维存在问题及改进

欢迎大家一起学习交流https://t.zsxq.com/imimAYF​t.zsxq.com1.1 IT运维机制不完善&#xff0c;流程操作层面缺乏统一 没有建立起稳定、规范的IT运维机制。现有的IT运维流程的操作层面缺乏统一。如事件单提交之后&#xff0c;事件预判和优先级的设定缺少统一、规范的指导文档&…

在linux中 要删除abc目录,操作系统原理与应用(linux)A卷

福州外语外贸职业技术学院2010-2011学年第一学期(期末)试卷09 级网络系统管理专业操作系统原理与应用(linux)科目(A )卷课程代码考试形式闭卷考试时量 120 分钟姓名__ _______ _级班学号____ __1.操作系统是一种( )A.系统软件B.系统硬件C.应用软件D.支援软件2.MS—DOS的存贮管理…

数据产品经理修炼手册pdf_【尼读书】数据产品经理修炼手册(附思维导图)

前言&#xff1a;进入一个行业&#xff0c;除了要多在工作中实践和思考之外&#xff0c;还需要多读书。这样能够站在一个更高的角度去看问题&#xff0c;往往会对问题有更全面的掌握和新的认知。在【尼读书】这个栏目中&#xff0c;尼同学通过自己读书后的理解和整理与大家分享…

用JQUERY为INPUT的TXT类型赋值及取值操作

注意和纯JS操作的区别&#xff0c;一个是对象&#xff0c;一个是字串&#xff0c;如下说明&#xff1a; 在Jquery中,用$("#id")来获得页面的input元素,其相当于document.getElementById("element")但是,该获取的是一个Jquery对象,而不是一个dom element对象…

linux内核打印前有buildroot,buildroot-linux内核

Buildroot可以从Linux Kernel的官网(kernel.org)下载并编译内核&#xff0c;也可以使用用户自己的定制化内核。使用官方内核使用官方的内核构建系统非常简单&#xff0c;事实上&#xff0c;mini2440_defconfig就是采用官方的内核进行构建的。make menuconfig --> Kernel --&…

POJ 1077 Eight

题意&#xff1a;经典的八数码3 3*3的格子&#xff0c;里面有1~8这8个数字&#xff0c;还有一个空格x&#xff0c;移动空格的位置&#xff0c;直到移到1~8按顺序排好&#xff0c;输出移动的序列。 解法&#xff1a;看到题果断写了个广搜……然后T了……百度了一下说广搜虽然慢了…

成都软件工程师python_为什么每个软件工程师都应该学习Python?

为什么要写一篇文章告诉大家去学习python&#xff1f;最受欢迎的编程语言不是JAVA么&#xff1f;的确&#xff0c;TIOBE指数显示JAVA依然是最受欢迎的编程语言&#xff0c;但是Python的崛起不可小觑&#xff0c;请看4月份最新的TIOBE指数其实从2016年起&#xff0c;Python就已经…

linux修改某个用户的数组,linux-shell编程1:变量和数组

Shell用户与系统内核之间交流平台Shell类型/bin/sh/bin/bash(系统默认bash)/bin/tcsh/bin/csh/etc/shells 放置当前系统可用shell为什么需要shell编程1.减少繁琐工作的重复进行&#xff0c;减少错误2.提高工作效率3.事态的批量化进行Bash特点功能1.查看命令历史(1000条)history…

erlang OTP中的四大behaviour fsm的例子

下面是一个fsm的例子&#xff0c;代码如下&#xff1a; 1 -module(code_lock2).2 3 -behaviour(gen_fsm).4 -export([start_link/1]).5 -export([button/1]).6 -export([init/1, locked/2, open/2]).7 -export([code_change/4, handle_event/3, handle_info/3, handle_sync_eve…

node python复用代码_python-代码复用(函数、lambda、递归、PyInstaller库)

一、函数1、函数定义def 函数名(参数列表)&#xff1a;2、返回值 return返回值可以有多个&#xff0c;其实是返回一个tuple##多个返回值def sumDiff(x,y):return xy,x-yn1,n2 eval(input(输入两个数&#xff1a;))s,d sumDiff(n1,n2)print(和为{}&#xff0c;差为{}.format(…

关于linux内核的有关叙述中,下列关于嵌入式Linux系统内核的叙述正确的是()。

听力原文&#xff1a; A $150 million project to replace all of the vertical suspension cables on the 100-year-old Manhattan Bridge will cause occasional weekend disruptions in subway service and require closings of the bikeway and some traffic lanes for par…

WebStorm 预览时把浏览器地址localhost 改成IP

最近在使用WebStorm时&#xff0c;预览网页时地址总是显示的 http://localhost:63342/... &#xff0c;如果要调试其它设备感觉很不方法&#xff0c;此时肯定首先想到的亲爱的度娘&#xff0c;但是貌似没有真正很解决问题的&#xff08;可能是我搜索方法不对&#xff09;。最后…

通用即插即用监视器驱动下载_电脑设备驱动程序有问题,教你3招,快速修复...

驱动程序允许你的设备与Windows 10进行通信。计算机必须安装最新版本的驱动程序才能正常运行。设备驱动程序是一种特殊的软件程序&#xff0c;它控制连接到计算机的特定硬件设备&#xff0c;设备驱动程序对于计算机促进系统与所有已安装程序或应用程序之间的通信至关重要&#…

python在线投票系统讲解_在线投票系统功能分析

网上投票系统的功能一、功能概述(1)客户模块客户模块主要是添加投票项目信息&#xff0c;比如投票项目的题目&#xff0c;选项以及系统配置的要求。(2)新闻模块新闻模块主要是一些关于本系统的新闻信息&#xff0c;其中包括新闻显示和添加删除模块。(3)留言薄模块留言薄模块主要…

linux内存管理的主要概念是虚拟内存,你知道linux内存管理基础及方法?

描述一、基本概念(1)物理内存和虚拟内存物理内存&#xff1a;系统硬件提供的真实物理内存虚拟内存&#xff1a;利用磁盘空间虚拟出的一块逻辑内存&#xff0c;用作虚拟内存的磁盘空间被称为swap&#xff0c;swap类似于windows的虚拟内存。1、linux的内存管理采取的分页存取机制…

R plot图片背景设置为透明_R语言入门第十二讲:基础绘图(二)------plot与par函数(1)...

上一次给大家简单展示了plot函数的用法&#xff0c;以及par函数的使用。今天我们继续应用这两个函数&#xff0c;看看它的其他功能。下面这个图是数据的一部分[1]。我一直认为&#xff0c;作图简单&#xff0c;但关键是要知道数据在数据库中的格式&#xff0c;才能更好的应用到…

qqkey获取原理_【逆向】QQkey盗号木马原理分析

一、简介QQkey是一段字符串&#xff0c;通过这段字符串在没有QQ登录密码的前提下你依然能够在浏览器中对别人QQ空间、邮箱等应用进行随意访问和操作。现在市面上已经有很多使用易语言编写的盗号木马&#xff0c;专门盗取别人的QQkey&#xff0c;通过QQkey改绑关联了该邮箱的Ste…

visual studio 2015 搭建python开发环境,python入门到精通[三]

在上一篇博客Windows搭建python开发环境&#xff0c;python入门到精通[一]很多园友提到希望使用visual studio 2013/visual studio 2015 python做demo&#xff0c;这里略带一句&#xff0c;其实就"学习python"而言&#xff0c;比较建议使用pycharm&#xff0c;pychar…

linux 用脚本建分区,脚本创建磁盘分区

首先最好添加一个空白的磁盘&#xff0c;以免对原数据产生破坏&#xff0c;若果不想添加磁盘也可以&#xff0c;用一个里面数据无关紧要的磁盘&#xff0c;当然前提是必须要对该磁盘内已有的分区进行清空&#xff0c;方法后面第三步会有1.先看脚本内容&#xff1a;[rootlocalho…