codevs 1365 浴火银河星际跳跃

1365 浴火银河星际跳跃

时间限制: 1 s   空间限制: 128000 KB  题目等级 : 黄金 Gold

题目描述 Description

小 K 又在玩浴火银河了。。。不过这次他的目的不是跑运输赚钱,而

是做任务赚钱。

他想知道关于一个任务的两个星系是否可以连通。

输入描述 Input Description

第一行,三个数,X,N,M

X 表示出现的星系代号的最大值;

N 表示有 N 个星际跳跃门;

M 表示有 M 个任务。

接下来的 N 行描述每个星际跳跃门:每行为两个数字(星系代号),

星际跳跃门连通这两个星系(星际跳跃门是可以双向通行的)

接下来的 M 行表示每个任务需要到达的星系,每个任务需要到达两

个星系。

输出描述 Output Description

共 M 行。

第 i 行表示第 i 个任务是否能完成:即两个星系是否能连通。(能→

Yes;不能→No)

样例输入 Sample Input

5 2 1

3 5

4 5

3 4

样例输出 Sample Output

Yes

数据范围及提示 Data Size & Hint

最大数据第一行:19999 17542 1664

思路:显而易见,只要询问的两个点属于一个强连通分量,就能到达,否则不能到达,tarjan水之。

喜闻乐见的Code

#include<cstdio>
#include<algorithm>
using namespace std;
#define maxn 20004
#define maxm 17545
struct Edge {
	int u,v,next;
	Edge(int u=0,int v=0,int next=0):
		u(u),v(v),next(next) {}
}edge[maxm<<1];
int head[maxn],cnt=0;
int dfn[maxn],low[maxn],timee=0;
int st[maxn],top,col[maxn],num=0;
bool ins[maxn],vis[maxn];
inline int input() {
	char c=getchar();int x=0,flag=1;
	for(;c<‘0‘||c>‘9‘;c=getchar())
		if(c==‘-‘) flag=-1;
	for(;c>=‘0‘&&c<=‘9‘;c=getchar())
		x=(x<<1)+(x<<3)+c-‘0‘;
	return x*flag;
}
inline void Add_edge(int u,int v) {
	edge[++cnt]=Edge(u,v,head[u]);
	head[u]=cnt;
	return;
}
void dfs(int now) {
	dfn[now]=low[now]=++timee;
	st[++top]=now;
	vis[now]=ins[now]=true;
	for (int i=head[now];i;i=edge[i].next) {
		int v=edge[i].v;
		if(ins[v])
			low[now]=min(low[now],dfn[v]);
		else if(!vis[v]) {
			dfs(v);
			low[now]=min(low[now],low[v]);
		}
	}
	if(low[now]==dfn[now]) {
		col[now]=++num;
		while (st[top]!=now) {
			col[st[top]]=num;
			ins[st[top--]]=false;
		}
		ins[now]=false;
		top--;
	}
	return;
}
int main() {
	int n=input(),m=input(),q=input();
	for(int i=1;i<=m;i++) {
		int u=input(),v=input();
		Add_edge(u,v);
		Add_edge(v,u);
	}
	for(int i=1;i<=n;i++)
		if(!vis[i]) dfs(i);
	while(q--) {
		int x=input(),y=input();
		if(col[x]!=col[y]) printf("No\n");
		else printf("Yes\n");
	}
	return 0;
}

  

时间: 2024-10-13 17:13:44

codevs 1365 浴火银河星际跳跃的相关文章

初学并查集-3:浴火银河星际跳跃

题目描述 Description 小 K 又在玩浴火银河了...不过这次他的目的不是跑运输赚钱,而 是做任务赚钱. 他想知道关于一个任务的两个星系是否可以连通. 输入描述 Input Description 第一行,三个数,X,N,M X 表示出现的星系代号的最大值: N 表示有 N 个星际跳跃门; M 表示有 M 个任务. 接下来的 N 行描述每个星际跳跃门:每行为两个数字(星系代号), 星际跳跃门连通这两个星系(星际跳跃门是可以双向通行的) : 接下来的 M 行表示每个任务需要到达的星系,每

Codevs 1371 浴火银河跑运输

时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description: 小 K 又在玩浴火银河了...不过这次他的目的真的是跑运输赚钱... 他想知道在两个星系之间跑运输最多可以赚多少钱. 他的路线是 [星系 1—星际 2] 输入描述 Input Description: 第一行,两个数,A,B: A 代表有多少种货物:B 代表小 K 的飞船最大承载重力: 接下来的 A 行:第 i 行表示第 i 种货物的信息: {在星系 1 的价格}{在星系 2

星际竞速(bzoj 1927)

Description 10年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一,夺得这个项目的冠军无疑是很多人的梦想,来自杰森座α星的悠悠也是其中之一.赛车大赛的赛场由N颗行星和M条双向星际航路构成,其中每颗行星都有一个不同的引力值.大赛要求车手们从一颗与这N颗行星之间没有任何航路的天体出发,访问这N颗行星每颗恰好一次,首先完成这一目标的人获得胜利.由于赛制非常开放,很多人驾驶着千奇百怪的自制赛车来参赛.这次悠悠驾驶的赛车名为超能电驴,这是一部凝聚了全银河最尖端科技结晶的梦幻赛车.作为

bzoj1927: [Sdoi2010]星际竞速

跟上一题几乎一样... #include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> using namespace std; #define rep(i,n) for(int i=1;i<=n;i++) #define clr(x,c) memset(x,c,sizeof(x)) #define op() clr(head

【bzoj1927】[Sdoi2010]星际竞速 有上下界费用流

原文地址:http://www.cnblogs.com/GXZlegend/p/6832464.html 题目描述 10年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一,夺得这个项目的冠军无疑是很多人的梦想,来自杰森座α星的悠悠也是其中之一.赛车大赛的赛场由N颗行星和M条双向星际航路构成,其中每颗行星都有一个不同的引力值.大赛要求车手们从一颗与这N颗行星之间没有任何航路的天体出发,访问这N颗行星每颗恰好一次,首先完成这一目标的人获得胜利.由于赛制非常开放,很多人驾驶着千奇百怪的自制赛

【BZOJ】1927: [Sdoi2010]星际竞速(二分图+费用流)

http://www.lydsy.com/JudgeOnline/problem.php?id=1927 好神的题!!!!!!!!!!!!!!!!!!! 拆点后变成二分图,其实我们要求的就是类似路径覆盖这样的东西!! 只不过是加了权的.. 建图: 源向i+n连容量1,费用为能力爆发的费用 源向i连容量1,费用为0 i+n向汇连容量1,费用0 如果有边x<y,连x到y+n容量为1,费用为时间 然后跑最小费用最大流 为什么这样就行了呢? 首先,最大流一定是一个对n个点的路径覆盖(即覆盖掉所有的附加点

洛谷 P2469 [SDOI2010]星际竞速 解题报告

题目描述 10年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一,夺得这个项目的冠军无疑是很多人的梦想,来自杰森座α星的悠悠也是其中之一. 赛车大赛的赛场由N颗行星和M条双向星际航路构成,其中每颗行星都有一个不同的引力值.大赛要求车手们从一颗与这N颗行星之间没有任何航路的天体出发,访问这N颗行星每颗恰好一次,首先完成这一目标的人获得胜利. 由于赛制非常开放,很多人驾驶着千奇百怪的自制赛车来参赛.这次悠悠驾驶的赛车名为超能电驴,这是一部凝聚了全银河最尖端科技结晶的梦幻赛车.作为最高科技的

【BZOJ 1927】 [Sdoi2010]星际竞速

Description 10 年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一, 夺得这个项目的冠军无疑是很多人的梦想,来自杰森座 α星的悠悠也是其中之一. 赛车大赛的赛场由 N 颗行星和M条双向星际航路构成,其中每颗行星都有 一个不同的引力值.大赛要求车手们从一颗与这 N 颗行星之间没有任何航路的 天体出发,访问这 N 颗行星每颗恰好一次,首先完成这一目标的人获得胜利. 由于赛制非常开放,很多人驾驶着千奇百怪的自制赛车来参赛.这次悠悠驾 驶的赛车名为超能电驴,这是一部凝聚了全银河最

bzoj 1927 [Sdoi2010]星际竞速(最小费用最大流)

1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec  Memory Limit: 259 MBSubmit: 1576  Solved: 954[Submit][Status][Discuss] Description 10 年一度的银河系赛车大赛又要开始了.作为全银河最盛大的活动之一, 夺得这个项目的冠军无疑是很多人的梦想,来自杰森座 α星的悠悠也是其中之一. 赛车大赛的赛场由 N 颗行星和M条双向星际航路构成,其中每颗行星都有 一个不同的引力值.大赛要求车手们从一