#pragma GCC optimize ("Ofast")
#include<bits/stdc++.h>
using namespace std;
#define main dummy_main
int main( ) {
return 0 ;
}
#undef main
int op[ 501 ] ;
int cnt[ 501 ] ;
int bef[ 501 ] [ 501 ] ;
class Solution{
public :
int unhappyFriends( int n, vector< vector< int >> & preferences, vector< vector< int >> & pairs) {
int i;
for ( vector< int > d : pairs) {
op[ d[ 0 ] ] = d[ 1 ] ;
op[ d[ 1 ] ] = d[ 0 ] ;
}
for ( i= ( 0 ) ; i< ( n) ; i++ ) {
int j;
for ( j= ( 0 ) ; j< ( n) ; j++ ) {
bef[ i] [ j] = 0 ;
}
}
for ( i= ( 0 ) ; i< ( n) ; i++ ) {
int j;
for ( j= ( 0 ) ; j< ( n) ; j++ ) {
if ( preferences[ i] [ j] == op[ i] ) {
break ;
}
bef[ i] [ preferences[ i] [ j] ] = 1 ;
}
}
for ( i= ( 0 ) ; i< ( n) ; i++ ) {
cnt[ i] = 0 ;
}
for ( i= ( 0 ) ; i< ( n) ; i++ ) {
int j;
for ( j= ( i+ 1 ) ; j< ( n) ; j++ ) {
if ( bef[ i] [ j] && bef[ j] [ i] ) {
cnt[ i] = cnt[ j] = 1 ;
}
}
}
{
int APIVbQlN;
int YREPHmFM;
if ( n== 0 ) {
YREPHmFM = 0 ;
}
else {
YREPHmFM = cnt[ 0 ] ;
for ( APIVbQlN= ( 1 ) ; APIVbQlN< ( n) ; APIVbQlN++ ) {
YREPHmFM + = cnt[ APIVbQlN] ;
}
}
return YREPHmFM;
}
}
}
;
// cLay varsion 20200913-1
// --- original code ---
// #define main dummy_main
// {}
// #undef main
//
// int op[501], cnt[501];
// int bef[501][501];
//
// class Solution {
// public:
// int unhappyFriends(int n, vector<vector<int>>& preferences, vector<vector<int>>& pairs) {
// for(vector<int> d : pairs){
// op[d[0]] = d[1];
// op[d[1]] = d[0];
// }
//
// rep(i,n) rep(j,n) bef[i][j] = 0;
// rep(i,n) rep(j,n){
// if(preferences[i][j] == op[i]) break;
// bef[i][preferences[i][j]] = 1;
// }
//
// rep(i,n) cnt[i] = 0;
// rep(i,n) rep(j,i+1,n) if(bef[i][j] && bef[j][i]) cnt[i] = cnt[j] = 1;
//
// return sum(cnt(n));
// }
// };
I3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJPZmFzdCIpCiNpbmNsdWRlPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgbWFpbiBkdW1teV9tYWluCmludCBtYWluKCl7CiAgcmV0dXJuIDA7Cn0KI3VuZGVmIG1haW4KaW50IG9wWzUwMV07CmludCBjbnRbNTAxXTsKaW50IGJlZls1MDFdWzUwMV07CmNsYXNzIFNvbHV0aW9uewogIHB1YmxpYzoKICBpbnQgdW5oYXBweUZyaWVuZHMoaW50IG4sIHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIHByZWZlcmVuY2VzLCB2ZWN0b3I8dmVjdG9yPGludD4+JiBwYWlycyl7CiAgICBpbnQgaTsKICAgIGZvcih2ZWN0b3I8aW50PiBkIDogcGFpcnMpewogICAgICBvcFtkWzBdXSA9IGRbMV07CiAgICAgIG9wW2RbMV1dID0gZFswXTsKICAgIH0KICAgIGZvcihpPSgwKTtpPChuKTtpKyspewogICAgICBpbnQgajsKICAgICAgZm9yKGo9KDApO2o8KG4pO2orKyl7CiAgICAgICAgYmVmW2ldW2pdID0gMDsKICAgICAgfQogICAgfQogICAgZm9yKGk9KDApO2k8KG4pO2krKyl7CiAgICAgIGludCBqOwogICAgICBmb3Ioaj0oMCk7ajwobik7aisrKXsKICAgICAgICBpZihwcmVmZXJlbmNlc1tpXVtqXSA9PSBvcFtpXSl7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgYmVmW2ldW3ByZWZlcmVuY2VzW2ldW2pdXSA9IDE7CiAgICAgIH0KICAgIH0KICAgIGZvcihpPSgwKTtpPChuKTtpKyspewogICAgICBjbnRbaV0gPSAwOwogICAgfQogICAgZm9yKGk9KDApO2k8KG4pO2krKyl7CiAgICAgIGludCBqOwogICAgICBmb3Ioaj0oaSsxKTtqPChuKTtqKyspewogICAgICAgIGlmKGJlZltpXVtqXSAmJiBiZWZbal1baV0pewogICAgICAgICAgY250W2ldID0gY250W2pdID0gMTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHsKICAgICAgaW50IEFQSVZiUWxOOwogICAgICBpbnQgWVJFUEhtRk07CiAgICAgIGlmKG49PTApewogICAgICAgIFlSRVBIbUZNID0gMDsKICAgICAgfQogICAgICBlbHNlewogICAgICAgIFlSRVBIbUZNID0gY250WzBdOwogICAgICAgIGZvcihBUElWYlFsTj0oMSk7QVBJVmJRbE48KG4pO0FQSVZiUWxOKyspewogICAgICAgICAgWVJFUEhtRk0gKz0gY250W0FQSVZiUWxOXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIFlSRVBIbUZNOwogICAgfQogIH0KfQo7Ci8vIGNMYXkgdmFyc2lvbiAyMDIwMDkxMy0xCgovLyAtLS0gb3JpZ2luYWwgY29kZSAtLS0KLy8gI2RlZmluZSBtYWluIGR1bW15X21haW4KLy8ge30KLy8gI3VuZGVmIG1haW4KLy8gCi8vIGludCBvcFs1MDFdLCBjbnRbNTAxXTsKLy8gaW50IGJlZls1MDFdWzUwMV07Ci8vIAovLyBjbGFzcyBTb2x1dGlvbiB7Ci8vIHB1YmxpYzoKLy8gICBpbnQgdW5oYXBweUZyaWVuZHMoaW50IG4sIHZlY3Rvcjx2ZWN0b3I8aW50Pj4mIHByZWZlcmVuY2VzLCB2ZWN0b3I8dmVjdG9yPGludD4+JiBwYWlycykgewovLyAgICAgZm9yKHZlY3RvcjxpbnQ+IGQgOiBwYWlycyl7Ci8vICAgICAgIG9wW2RbMF1dID0gZFsxXTsKLy8gICAgICAgb3BbZFsxXV0gPSBkWzBdOwovLyAgICAgfQovLyAKLy8gICAgIHJlcChpLG4pIHJlcChqLG4pIGJlZltpXVtqXSA9IDA7Ci8vICAgICByZXAoaSxuKSByZXAoaixuKXsKLy8gICAgICAgaWYocHJlZmVyZW5jZXNbaV1bal0gPT0gb3BbaV0pIGJyZWFrOwovLyAgICAgICBiZWZbaV1bcHJlZmVyZW5jZXNbaV1bal1dID0gMTsKLy8gICAgIH0KLy8gCi8vICAgICByZXAoaSxuKSBjbnRbaV0gPSAwOwovLyAgICAgcmVwKGksbikgcmVwKGosaSsxLG4pIGlmKGJlZltpXVtqXSAmJiBiZWZbal1baV0pIGNudFtpXSA9IGNudFtqXSA9IDE7Ci8vIAovLyAgICAgcmV0dXJuIHN1bShjbnQobikpOwovLyAgIH0KLy8gfTsK