PTA_2020模拟赛_L2-4 秀恩爱分得快 (25 分)_细节模拟_TLE处理
//
#include<bits/stdc++.h>
using namespace std;
const int N=1111;
double in[2][N];
int sex[N];
vector<int> vv[N];
set<int> st1,st2;
set<int>::iterator it;
inline int read()
{
int ans=0,f=1;
char ch=getchar();
while( !isdigit(ch) )
{
if( ch=='-' ) f=0;
ch=getchar();
}
while( isdigit(ch) )
{
ans=( ans<<1 )+( ans<<3 )+( ch-'0' );
ch=getchar();
}
sex[ans]=f;
return ans;
}
int main()
{
int n,m,i,j,k,a,b,f1,f2;
double tt;
while( cin>>n>>m )
{
for( i=0;i<m;i++ )
{
cin>>k;
vv[i].resize(k);
for( j=0;j<k;j++ ) vv[i][j]=read();
}
a=read(); b=read();
for( i=0;i<m;i++ )
{
if( find( vv[i].begin(),vv[i].end(),a )!=vv[i].end() )
for( j=0;j<vv[i].size();j++ )
{
if( vv[i][j]==a ) continue;
in[0][vv[i][j]]+=(double)1/vv[i].size();
}
if( find( vv[i].begin(),vv[i].end(),b )!=vv[i].end() )
for( j=0;j<vv[i].size();j++ )
{
if( vv[i][j]==b ) continue;
in[1][vv[i][j]]+=(double)1/vv[i].size();
} // +=
}
f1=f2=0;
// tt=in[a][b] 段错误
tt=0; st1.clear();
for( i=0;i<n;i++ )
{
if( in[0][i]>tt && sex[a]+sex[i]==1 )
{
st1.clear(); tt=in[0][i]; st1.insert( i );
}
else if( in[0][i]==tt && sex[a]+sex[i]==1 )
{
st1.insert( i );
}
}
if( st1.find( b )!=st1.end() ) f1=1;
tt=0; st2.clear();
for( i=0;i<n;i++ )
{
if( in[1][i]>tt && sex[b]+sex[i]==1 )
{
st2.clear(); tt=in[1][i]; st2.insert( i );
}
else if( in[1][i]==tt && sex[b]+sex[i]==1 )
{
st2.insert( i );
}
}
if( st2.find( a )!=st2.end() ) f2=1;
if( f1 && f2 )
{
if( sex[a]==0 ) cout<<"-"; cout<<a<<" ";
if( sex[b]==0 ) cout<<"-"; cout<<b<<endl;
continue;
}
for( it=st1.begin();it!=st1.end();++it )
{
if( sex[a]==0 ) cout<<"-"; cout<<a<<" ";
if( sex[(*it)]==0 ) cout<<"-"; cout<<(*it)<<endl;
}
for( it=st2.begin();it!=st2.end();++it )
{
if( sex[b]==0 ) cout<<"-"; cout<<b<<" ";
if( sex[(*it)]==0 ) cout<<"-"; cout<<(*it)<<endl;
} // (*it) !!!
}
return 0;
}