P2256 一中校运会之百米跑(map映射加并查集)
真心水,也许只有我这样的蒟蒻能做这种题了吧。用STL中的map将所有人的名字映射成一个数字,然后就是并查集的裸题
#include<bits/stdc++.h> using namespace std; map<string,int> mp; const int maxn=1000010; int n,m; int k; int father[maxn]; string s; string s1,s2; string l1,l2; int get(int x) { if(father[x]!=x) { father[x]=get(father[x]); } return father[x]; } void united(int x,int y) { int f1=get(x); int f2=get(y); if(f1==f2) { return; } else { father[f2]=f1; } } bool check(int x,int y) { int f1=get(x); int f2=get(y); if(f1==f2) { return true; } return false; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { cin>>s; mp[s]=i; father[mp[s]]=i; } for(int i=1;i<=m;i++) { cin>>s1>>s2; united(mp[s1],mp[s2]); } scanf("%d",&k); for(int i=1;i<=k;i++) { cin>>l1>>l2; if(check(mp[l1],mp[l2])) { printf("Yes.\n"); } else { printf("No.\n"); } } return 0; }