ZOJ 3811

亏大了,当时没做,被另一道题目题意给坑了,其实把他建成一个双向图,首先l <k  或者整个图 无法连通 那么肯定是No,在这个双向图里,以 L 个触发器 亮的顺序来,先从第一个开始深搜,遇到一个触发器 就停止往下搜,这样 当前第一个触发器 与其它 几个触发器之间有路径可达,并放在一个集合里,接下来判断 第二个触发器是否在这个集合里,以此类推,到第二个触发器  也去深搜,搜完 再判断第三个触发器 是否在这个集合里推到最后一个即可,而且搜索过的点可以不用再搜索,降低了复杂度,因为若都在一个集合里,肯定是可以到达的,

看题解多数使用了并查集,不过也有几个题解的的思路 差不多也是这个样子,解法挺多的

int t;
int n,m,k;
int nnum[100000 + 55];
bool vis[100000 + 55];
bool flag[100000 + 55];

vector<int > G[100000 + 55];
set<int > my_set;

void init() {
	my_set.clear();
	memset(vis,false,sizeof(vis));
	memset(nnum,0,sizeof(nnum));
	memset(flag,false,sizeof(flag));
	for(int i=0;i<100000 + 55;i++)G[i].clear();
}

bool input() {
	while(scanf("%d %d %d",&n,&m,&k)) {
		int xx;
		for(int i=0;i<k;i++) scanf("%d",&xx);
		int q = m;
		while(q--) {
			int u,v;
			scanf("%d %d",&u,&v);
			G[u].push_back(v);
			G[v].push_back(u);
		}
		return false;
	}
	return true;
}

void dfs(int u) {
	vis[u] = true;
	for(int i=0;i<G[u].size();i++) {
		int v = G[u][i];
		if(!vis[v]) {
			if(flag[v]){ my_set.insert(v);continue;}
			dfs(v);
		}
	}
}

void cal() {
	int l;
	scanf("%d",&l);
	for(int i=0;i<l;i++) {
		scanf("%d",&nnum[i]);
		flag[nnum[i]] = true;
	}
	if(l < k){puts("No");return ;}
	dfs(nnum[0]);
	for(int i=1;i<l;i++) {
		if(my_set.find(nnum[i]) == my_set.end()) { puts("No");return ; }
		dfs(nnum[i]);
	}
	for(int i=1;i<=n;i++) {
		if(!vis[i]) {puts("No");return ;}
	}
	puts("Yes");
}

void output() {

}

int main() {
	scanf("%d",&t);
	while(t--) {
		init();
		if(input())return 0;
		cal();
		output();
	}
	return 0;
}
时间: 2024-08-06 18:43:33

ZOJ 3811的相关文章

zoj 3811 Untrusted Patrol(bfs或dfs)

Untrusted Patrol Time Limit: 3 Seconds      Memory Limit: 65536 KB Edward is a rich man. He owns a large factory for health drink production. As a matter of course, there is a large warehouse in the factory. To ensure the safety of drinks, Edward hir

ZOJ 3811 zoj 3811 Untrusted Patrol牡丹江网络赛C题

去年的比赛题目,今年才搞懂AC了===|| 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cstring> 4 #include <cctype> 5 #include <cmath> 6 #include <algorithm> 7 #include <vector> 8 #include <queue> 9 #include <stack&g

ZOJ 3811 Untrusted Patrol【并查集】

题目大意:给一个无向图,有些点有装监视器记录第一次到达该点的位置,问是否存在一条路径使得监视器以给定的顺序响起,并且经过所有点 思路:牡丹江网络赛的题,当时想了种并查集的做法,通神写完程序WA了几发,此时JYB用BFS秒了,索性最后还是调出来了,今天自己写了下,感觉唯一的坑点就是需要遍历完所有的点 //zoj3811 #include <stdio.h> #include <string.h> #include <algorithm> #include <queu

ZOJ 3811 Untrusted Patrol

题意: 一幅图某些点有监视器  监视器只记录第一次路过的时间  问  给出路线序列  是否存在满足序列的情况下遍历整幅图的点 思路: 不要想割点  割点无法处理在一个双连通分量内的多个监视器  这题就是贪心+搜索 贪心就是尽量多的使用不违背序列的点  那么我们先把序列里的第一个点和不存在监视器的点加入图  并将他们连边  对于其他的序列中的点  如果这个点存在与第一个点所形成的连通块连接的边  那么就加入这个点  否则没有答案 这里的加入点其实就是一个染色的过程  所以用搜索来搞一下 代码: #

ZOJ 3811 / 2014 牡丹江赛区网络赛 C. Untrusted Patrol bfs/dfs/并查集

Untrusted Patrol Time Limit: 3 Seconds                                     Memory Limit: 65536 KB Edward is a rich man. He owns a large factory for health drink production. As a matter of course, there is a large warehouse in the factory. To ensure t

ZOJ 3811 Untrusted Patrol The 2014 ACM-ICPC Asia Mudanjiang Regional First Round

Description Edward is a rich man. He owns a large factory for health drink production. As a matter of course, there is a large warehouse in the factory. To ensure the safety of drinks, Edward hired a security man to patrol the warehouse. The warehous

ZOJ 3811 Untrusted Patrol dfs

Untrusted Patrol Time Limit: 3 Seconds      Memory Limit: 65536 KB Edward is a rich man. He owns a large factory for health drink production. As a matter of course, there is a large warehouse in the factory. To ensure the safety of drinks, Edward hir

ZOJ 3811 Untrusted Patrol bfs+并查集

题目链接:点击打开链接 题意: 给定n个点m条边的无向图,k个触发器. 下面k个数表示触发器安装在哪几个点. 下面m行给出边 最后有l个信号, 给出信号发出的触发器的顺序. 每个触发器只会发出一次信号,且一个点只有一个触发器. 有一个人在遍历图. 每经过一个点,那个点的触发器就会发出信号,问是否存在一种走法使得这个人遍历了所有点且触发器发出的信号顺序和给出的一样. 思路: 先把无触发器的点放到图里. 然后根据触发器的信号顺序把点依次加入图中,加入时只添加(与无触发器点相连的边) 然后判断这个点能

zoj 3811 Untrusted Patrol DFS SET

http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=5343 当时是一个学弟过的,真心没想出来,回想起来其实可能有点后悔做ACM了,确实智商不够...... 11去牡丹江比赛,如果悲剧,ACM生涯就彻底悲剧了,尽量出结果......啥不说,专心刷题 此题还是参考了答案,,, 题目要求:按照次序访问某些点,如果能满足而且能遍历全图,输出yes否则no 学到: 1.是不是能按照规定次序,那么就这么看,按照规定次序,DFS第一个点,过程