KEYWORDS: std :: map <int ,vector > mymap ;(图,构造int型 和 int型一维数组的映射,一 对 多)
mymap[item1].push_back(item2);
std::vector V; std::vector::iterator ;vector.begin();vector.end();
for(iterator = vector.begin() ; iterator != vector; iterator ++)
AC CODE:
#include <iostream>
#include <vector>
#include <map>
#define MAXN 100000
using namespace std;
int main()
{
freopen("sample_input.txt","r",stdin);
int N,K;
map<int,vector<int> >m;
cin>>N>>K;
int item1,item2;
for(int i = 0 ; i < N ; i ++){
scanf("%d%d",&item1,&item2);
m[item1].push_back(item2);
m[item2].push_back(item1);
}
while(K--){
int total;
bool flag[MAXN] = {false};
bool flag_is_safe = true;
scanf("%d",&total);
vector<int> v(total);
for(int i = 0 ; i < total ; i ++){
scanf("%d",&v[i]);
flag[v[i]] = true;
}
vector<int> ::iterator it;
for( it = v.begin() ; it != v.end() ; it ++){
//cout<<*it<<endl;
//cout<<m[*it]<<endl;
for(int j =0 ; j < m[*it].size() ; j ++)
if(flag[m[*it][j]]){
flag_is_safe = false;
}
}
if(flag_is_safe) printf("Yes\n");
else printf("No\n");
}
}
Aside Note:如果题目没有对顺序有明确的要求,使用unordered_map比map效率更快。C++ reference 中在
- map containers are generally slower than unordered_map containers to
access individual elements by their key, but they allow the direct
iteration on subsets based on their order.
Code of Problem1090(used unordered_map header):
#include <iostream>
#include <vector>
#include <unordered_map>
#define MAXN 100000
using namespace std;
int main()
{
freopen("sample_input.txt","r",stdin);
int N,K;
unordered_map<int,vector<int> >m;
cin>>N>>K;
int item1,item2;
for(int i = 0 ; i < N ; i ++){
scanf("%d%d",&item1,&item2);
m[item1].push_back(item2);
m[item2].push_back(item1);
}
while(K--){
int total;
bool flag[MAXN] = {false};
bool flag_is_safe = true;
scanf("%d",&total);
vector<int> v(total);
for(int i = 0 ; i < total ; i ++){
scanf("%d",&v[i]);
flag[v[i]] = true;
}
vector<int> ::iterator it;
for( it = v.begin() ; it != v.end() ; it ++){
//cout<<*it<<endl;
//cout<<m[*it]<<endl;
for(int j =0 ; j < m[*it].size() ; j ++)
if(flag[m[*it][j]]){
flag_is_safe = false;
}
}
if(flag_is_safe) printf("Yes\n");
else printf("No\n");
}
}