这题主要是用到set的查询功能,直接暴力就好了
AC代码:
/* ***********************************************
Author :yzkAccepted
Created Time :2016/7/12 20:04:12
TASK :ggfly.cpp
LANG :C++
************************************************ */
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
#include <queue>
#include <set>
#include <map>
#include <string>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <stack>
using namespace std;
set<int> s[55];
void f(int a,int b)
{
int same=0;
set<int>::iterator it;
for(it=s[a].begin();it!=s[a].end();it++)
{
if(s[b].find(*it)!=s[b].end()) same++;
}
int all=s[a].size()+s[b].size()-same;
double ans=(double)same/(double)all*100;
printf("%.2lf%%\n",ans);
}
int main()
{
//freopen("in.txt","r",stdin);
//freopen("out.txt","w",stdout);
int n,i,j;
cin>>n;
for(i=1;i<=n;i++)
{
int k,a,b;
scanf("%d",&k);
for(j=0;j<k;j++){
scanf("%d",&a);
s[i].insert(a);
}
}
cin>>n;
for(i=0;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
f(u,v);
}
return 0;
}