这个题就是set就完事了。。
#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<set>
using namespace std;
void print(set<int > b,set<int >a){set<int>::iterator it;int n=0;int s=a.size()+b.size();for(it=a.begin();it!=a.end();it++){if(b.find(*it)!=b.end())n++;}printf("%.1f%%\n",(double)n/(s-n)*100);
}
int main(){int n,m,temp;set <int > s[50];scanf("%d",&n);for(int i=0;i<n;i++){scanf("%d",&m);for(int j=0;j<m;j++){scanf("%d",&temp);s[i].insert(temp);}}int k,a,b;scanf("%d",&k);for(int i=0;i<k;i++){scanf("%d %d",&a,&b);print(s[a-1],s[b-1]);}return 0;
}