hdu-6165(tarjan+topusort)

题意:一个有向图,无自环,无重边,让你判断这个图内的任意两点是否有路;

解题思路:首先,判断两个点是否可达一般用出入度来判断,如果在拓扑排序中同时有两个及以上入度同时为零的点,那么,这些入度的为零的点肯定不可达,因为没有路径指向它;然后就是简化图了,一个环的点肯定可达,所以缩下点,再拓扑排序下;

代码:

#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<cstdio>
#include<cstring>
#define maxn 10005
using namespace std;
struct Edge
{int to;int next;
}edge[maxn];
struct node
{int x;int y;
}a[maxn];
int low[maxn];
int dfn[maxn];
int instack[maxn];
int visit[maxn];
int sccno[maxn];
int cnt;
int step;
int index;
int scc_cnt;
int head[maxn];
int indeg[maxn];
int indegree[maxn];
vector<int>scc[maxn];
void add(int u,int v)
{edge[cnt].next=head[u];edge[cnt].to=v;head[u]=cnt++;
}
void tarjan(int u)
{low[u]=dfn[u]=++step;instack[++index]=u;visit[u]=1;for(int i=head[u];i!=-1;i=edge[i].next){if(!dfn[edge[i].to]){tarjan(edge[i].to);low[u]=min(low[u],low[edge[i].to]);}else if(visit[edge[i].to]){low[u]=min(low[u],dfn[edge[i].to]);}}if(low[u]==dfn[u]){scc_cnt++;scc[scc_cnt].clear();do{scc[scc_cnt].push_back(instack[index]);sccno[instack[index]]=scc_cnt;visit[instack[index]]=0;index--;}while(u!=instack[index+1]);}return;
}
void init()
{memset(head,-1,sizeof(head));cnt=step=index=0;scc_cnt=0;memset(visit,0,sizeof(visit));memset(low,0,sizeof(low));memset(dfn,0,sizeof(dfn));memset(indegree,0,sizeof(indegree));
}
int topusort()
{int flag=0;queue<int>q;while(!q.empty())q.pop();for(int i=1;i<=scc_cnt;i++){indeg[i]=indegree[i];if(indeg[i]==0)q.push(i);}while(!q.empty()){if(q.size()>=2)flag=1;int temp=q.front();q.pop();for(int j=0;j<scc[temp].size();j++){for(int i=head[scc[temp][j]];i!=-1;i=edge[i].next){if(sccno[edge[i].to]!=temp){indeg[sccno[edge[i].to]]--;if(indeg[sccno[edge[i].to]]==0)q.push(sccno[edge[i].to]);}}}}return flag;
}
int main()
{int n,m;int x,y;int t;scanf("%d",&t);while(t--){init();scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d",&a[i].x,&a[i].y);add(a[i].x,a[i].y);}for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);for(int i=1;i<=m;i++)if(sccno[a[i].x]!=sccno[a[i].y])indegree[sccno[a[i].y]]++;int ans=topusort();if(ans==1)printf("Light my fire!\n");elseprintf("I love you my love and our love save us!\n");}
}

  

转载于:https://www.cnblogs.com/huangdao/p/8620088.html

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

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

相关文章

OPENCV-7 学习笔记

OPENCV-7 学习笔记 转换图像尺寸 resize函数。这是最直接的方式&#xff0c;yrUp( )、pyrDown( )函数。即图像金字塔相关的两个函数&#xff0c;对图像进行向上采样&#xff0c;向下采样的操作。 图像金字塔 类似于金字塔的形状&#xff0c;将原始图像以金字塔形状的分辨率…

杂项:E-Learning

ylbtech-杂项&#xff1a;E-Learning1.返回顶部 1、E-Learning&#xff1a;英文全称为&#xff08;Electronic Learning&#xff09;&#xff0c;中文译作“数字&#xff08;化&#xff09;学习”、“电子&#xff08;化&#xff09;学习”、“网络&#xff08;化&#xff09;学…

css --- flex布局的应用(between)

between 想把发布时间放在左边,点击放在右边 页面结构如下: 可以看到发布时间和点击是在类 .mui-ellipsis 下.使用css3的 flex 布局中的: space-between .mui-ellipsis{display: flex;justify-content: space-between; }

WeUI

介绍&#xff1a; WeUI是微信设计团队为微信网站开发量身定做的微信类UI界面&#xff0c;旨在改善和规范微信用户体验。包括组分如button&#xff0c;cell&#xff0c;dialog&#xff0c;progress&#xff0c;toast&#xff0c;article&#xff0c;actionsheet&#xff0c;icon…

php中的json

php中的json函数主要有三个&#xff1a; 函数描述json_encode()对变量进行 JSON 编码json_decode对 JSON 格式的字符串进行解码&#xff0c;转换为 PHP 变量json_last_error返回最后发生的错误 认识前提&#xff1a; {}&#xff0c;花括号代表包装的是一个对象数据&#xff0…

vue --- 全局配置过滤函数,使用moment函数来格式化时间

效果1 YYYY-MM-DD 效果2 YYYY-MM-DD HH:mm:ss 配置注意事项 由于时间格式化,在大多数页面中都会用到,因此建议配置在全局中 使用moment函数 -> http://momentjs.cn/ npm 安装 # 命令行 cnpm i moment -S在全局中配置 // main.js import moment from momentVue.f…

2018ICPC南京赛区网络赛J Sum(素数筛+找规律)

素数筛链接&#xff1a;https://blog.csdn.net/dl962454/article/details/76595623 【题意】 f(i)&#xff1a;能拆成两个数的乘积&#xff0c;并且这两个数要求没有平方因子&#xff0c;并且两个数的位置互换算两种方案。 最后求f(1)f(2)f(3)...f(n&#xff09;。 【解题思路】…

[UE4]C++中extern关键字浅谈

变量声明和变量是有区别的 extern int i; //只是声明i而非定义i int j; //声明而且还定义了j 任何一个显式初始化的声明都将成为定义&#xff0c;而不管有没有extern&#xff0c;extern语句一旦变量赋予了初始值就变成了定义。 extern double pi3.1415926; //定义 stat…

PHP 计算两个两个文件的相对路径

例&#xff1a; a‘/a/b/c/d/e.php′;a = ‘/a/b/c/d/e.php’; b ‘/a/b/12/34/c.php’; 二者的相对路径结果为&#xff1a;/a/b/12/34/../../c/d/e.php //计算出$b相对于$a的相对路径: function getRelativePath($a,$b){$returnPath array(dirname($b));$arrA explode(…

vue --- 使用vue-router获取带参数的路由

希望的效果如下: 2个路由: 点击如下 步骤. 使用 router-link 来指定路由路径在router.js中指定 路径的 事件处理函数(对应的组件)创建对应的组件 router-link 找到一个区别各个列表的属性(id),将其作为参数传递到路由中to是vue-router中用来绑定路由的属性由于需要进行计…

.Net Core2.*学习手册

1.net core 基础知识解析(创建一个.net core网站)(视频录制) 1.1 Startup解析(没写)   1.2 目录结构分析(没写)   1.3 使用静态文件(没写)   1.4 Controller(没写)   1.5 Razor页面(没写) 1.6.net core appsetting/获取配置文件   2.创建.net core项目 2.1 创建一个项…

java中static详解

这个博主写的总结很好,这里附上链接http://www.cnblogs.com/dolphin0520/p/3799052.html 下面进行简要总结: 在《Java编程思想》P86页有这样一段话&#xff1a; “static方法就是没有this的方法。在static方法内部不能调用非静态方法&#xff0c;反过来是可以的。而且可以在没有…

PHP 实现中文截取无乱码的方法

PHP 实现中文截取无乱码的方法 需知&#xff1a; 中文字符在gbk编码下为2个字符&#xff0c;utf-8下为3个字符中文字符的ASCII值是从0xa0后开始的通过ord()函数可以返回字符串中第一个字符的ASCII值&#xff0c;chr()函数作用相反 方法&#xff1a; function GBsubstr($str…

vue --- 全局注册子组件,并导入全局的子组件

假设: 需要一个评论的模块comment由于comment在多个页面中可能会复用.于是创建一个comment.vue 步骤: 创建comment.vue在需要引用的位置使import comment from ../subcomponent/Comment.vue 导入子组件在Vue实例中使用components属性注册注册的规则: “comment-box” : comm…

7. 反转整数

7. 反转整数 描述 给定一个 32 位有符号整数&#xff0c;将整数中的数字进行反转。 示例 示例 1: 输入: 123 输出: 321 示例 2: 输入: -123 输出: -321 示例 3: 输入: 120 输出: 21 注意: 假设我们的环境只能存储 32 位有符号整数&#xff0c;其数值范围是 [−2^31, 2^31 − 1]…

Laravel框架中的路由和控制器

路由 简介&#xff1a; 将用户的请求转发给相应的程序进行处理作用&#xff1a;建立url和程序之间的映射请求类型&#xff1a;get、post、put、patch、delete目录&#xff1a;app/http/routes.php基本路由&#xff1a;接收单种请求类型 //get请求 Route::get(hello1,function(…

小朋友学C++(1)

Hello World! 在学C之前&#xff0c;最好先学习一下C语言 让我们先运行一段简单的代码&#xff0c;编译器可以使用 在线C编译器 或 Xcode(苹果系统) 或Dev C&#xff08;Windows系统&#xff09;。 #include <iostream> using namespace std; int main() { cout <<…

mysql_表_操作

1、创建表 # 基本语法&#xff1a; create table 表名(列名 类型 是否可以为空 默认值 自增 主键&#xff0c;列名 类型 是否可以为空 )ENGINEInnoDB DEFAULT CHARSETutf8not null # 不可以为空 default 1 # 默认值为1 auto_increment # 自增 primary …

css --- 手机端,留言模块的样式

效果如下: 代码: 说明:用到了mint-ui,需要先安装mt-button的导入: import { Button } from ‘mint-ui’mt-button的使用: Vue.component(Button.name, Button)更多 http://mint-ui.github.io/ // comment.vue <template><div class"comment-container">…

Laravel 中的 视图和模型

视图 简介&#xff1a;视图包含了应用程序渲染的HTML数据&#xff0c;并将应用程序的显示逻辑与控制逻辑有效的分离开。在Laravel中&#xff0c;视图被保存在resources/views目录中。 php //数组中的内容可以表示在视图中调用数组&#xff0c;可以用echo $name得到name的值 …