#include <bits/stdc++.h>
#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <deque>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#define PII pair<int, int>
#define x first
#define y second
typedef long long ll;
const int inf = 0x3f3f3f3f;
const ll INF = 0x3f3f3f3f3f3f3f3f;
const int N = 1e3 + 7;
using namespace std;
int vis[N]; //标记男女
double aveA[N],aveB[N]; //分别找输入的俩个人和其它人的关系亲密度
vector<int>vec[N]; //存输入
void print(int a,int b){
if(vis[a])printf("-");
printf("%d ",a);
if(vis[b])printf("-");
printf("%d\n",b);
}
int main(int argc, char const *argv[]) {
int n,k;
cin>>n>>k;
for(int i=1;i<=k;i++){
int num;
cin>>num;
for(int j=1;j<=num;j++){ //先存起来,并标记好男女
char s[10];
cin>>s;
int t=abs(atoi(s));
if(s[0]=='-')vis[t]=1;
vec[i].push_back(t);
}
}
char s1[10],s2[10];
cin>>s1>>s2;
int st=fabs(atoi(s1)),en=fabs(atoi(s2));
if(s1[0]=='-')vis[st]=1;
if(s2[0]=='-')vis[en]=1;
double stmax=0,enmax=0; //找俩人最大的异性亲密度
for(int i=1;i<=k;i++){
bool stbool=find(vec[i].begin(),vec[i].end(),st)!=vec[i].end(); //找第i个输入是否包含这个人
bool enbool=find(vec[i].begin(),vec[i].end(),en)!=vec[i].end();
if(stbool||enbool){
int len=vec[i].size();
for(int j=0;j<len;j++){
int c=vec[i][j];
if(stbool&&vis[st]!=vis[c]){ //算亲密度
aveA[c]+=1.0/len;
stmax=max(stmax,aveA[c]);
}
if(enbool&&vis[en]!=vis[c]){
aveB[c]+=1.0/len;
enmax=max(enmax,aveB[c]);
}
}
}
}
if(aveA[en]==stmax&&aveB[st]==enmax)print(st,en); //如果分别是对方亲密度最大就输出
else { //否则输出全部
for(int i=0;i<n;i++){
if(vis[st]!=vis[i]&&aveA[i]==stmax)print(st,i);
}
for(int i=0;i<n;i++){
if(vis[en]!=vis[i]&&aveB[i]==enmax)print(en,i);
}
}
return 0;
}
秀恩爱分得快 (25 分)
最新推荐文章于 2023-04-20 18:21:20 发布