Competitive Programming

Codeforces 489 D: Unbearable Controversy of Being

http://codeforces.com/problemset/problem/489/D

Solution:

#include<bits/stdc++.h>
using namespace std ;
//-------------------------------
typedef long long ll ;
typedef vector vi ;
typedef pair ii ;
//-------------------------------
#define _CRT_SECURE_NO_WARNINGS
#define pb(a) push_back(a)
#define mp(a,b) make_pair(a,b)
#define rep(i,a,b) for(int i=(a) ; (i)<(b) ; ++i)
#define inf 2000000000
#define endl "\n"
#define de(x) cerr<<#x<<" is "<<x<b) ? (a) : (b) )
#define min(a,b) ( (a<b) ? (a) : (b) ) //------------------------------ int ri() { char c = getchar(); while(c'9') c=getchar(); int ret = 0; while(c>='0' && c<='9') { ret=10*ret+c-48; c=getchar(); } return ret; }
int n ;
int m ;
vi gr[3333] ;
vi inp[3333] ;
int u,v ;
int go[3003][3003] ;
mapmo ;
int main() {
//freopen("input.txt","r",stdin);
n=ri(); m=ri() ;
rep(i,0,m){
u=ri(); v=ri();
gr[u].pb(v) ;
mo[mp(u,v)]=1;
inp[v].pb(u) ;
}
rep(i,1,3003) if(inp[i].size()){
rep(j,0,inp[i].size()-1)
rep(k,j+1,inp[i].size()){
go[ inp[i][j] ][ inp[i][k] ] += 1 ;
go[ inp[i][k] ][ inp[i][j] ] += 1 ;
   }
}
ll ans = 0 ;
rep(i,1,n+1) if(gr[i].size())
{
rep(j,0,gr[i].size()-1)
rep(k,j+1,gr[i].size()){
ans += go[gr[i][j]][gr[i][k]] ;
if( mo[mp( gr[i][j],i)] && mo[mp( gr[i][k],i)] )
ans--;
      }
   }
printf("%lld",ans);
}

Leave a comment