pat-1134

该博客探讨了一道编程题目,涉及图的表示和查询处理。通过使用Hash表存储每个顶点对应的边号,对给定的查询进行处理,判断是否存在未被标记的边。关键在于理解并应用Hash思想来优化遍历过程,避免循环输出,并用局部变量控制输出状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

非常特别一道题 注意学习其中运用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值改变控制另一种情况的输出,类似于钥匙,本来是有钥匙的,发生一种后钥匙收走了,那个门自然也开不了了。

英语

 

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

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值