pat-1134

非常特别一道题 注意学习其中运用hash的思想

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
int main(){
	int n,m,a,b,k,tempk,c;
	cin>>n>>m;
	int hash[m]={0};
	vector<int> v[n];
	for(int i=0;i<m;i++){
		cin>>a>>b;
		v[a].push_back(i);
		v[b].push_back(i);
	}
	cin>>k;
	for(int i=0;i<k;i++){
		cin>>tempk;
		int flag=0;
		fill(hash,hash+m,0);
		for(int j=0;j<tempk;j++){
			cin>>c;
			for(int q=0;q<v[c].size();q++){
				hash[v[c][q]]=1;
			}
		}
		for(int i=0;i<m;i++){
			if(hash[i]==0){
				printf("No\n");
				flag=1;
			break;//for循环输出完就要结束了注意加break(注意)	
			}
		}
		if(flag!=1) printf("Yes\n");
	}
	return 0;
}

总结

1.本题的思想是利用hash散列存储每个顶点对应的边边号我们自己赋值,给出query后直接遍历对应顶点的存储的边号,访问一条标记一条

最后遍历全部的边号看有没有没被标记的,有就不是,没有就是

2.注意for循环输出以后,就要break,不要出现循环输出的情况

3.设置局部flag,插入到其中一种情况之中,如果发生什么输出完毕后,flag值改变控制另一种情况的输出,类似于钥匙,本来是有钥匙的,发生一种后钥匙收走了,那个门自然也开不了了。

英语

 问题 学习一下自主对边标号的情况

猜你喜欢

转载自blog.csdn.net/m0_45359314/article/details/113010121