= ì‚¬ì‹ ë„ = * * [http://www.algospot.com/judge/problem/read/FOURGODS ì‚¬ì‹ ë„] * A-B-C-D(-A) 와 ê°™ì€ ìˆœì„œê°€ ë˜ë„ë¡ í•˜ëŠ” ê²ƒì˜ ê²½ìš°ì˜ ìˆ˜ 구하기 * 염주 ìˆ˜ì—´ì€ ê°™ì€ ê²ƒìœ¼ë¡œ 본다. * ëª¨ë“ A와 Cì— ëŒ€í•´ì„œ 한다.(n^2) * B와 Dì˜ í›„ë³´ë¥¼ 찾아서 ì¡°ê±´ì— ë§žëŠ”ì§€ 확ì¸í•œë‹¤.(A,C와 ì—°ê²°ë˜ì–´ìžˆëŠ”지) (n) * í† íƒˆ n^3 * ì¤‘ë³µì œê±°. A-B-C-D는 숫ìžë¡œ 주어지므로 ìš°ì„ ìˆœìœ„ë¥¼ ì •í•œë‹¤.(e.g. ìž‘ì€ ìˆ«ìž ìš°ì„ ) * Aê°€ í•ìƒ 가장 ìž‘ì€ ìˆ«ìžê°€ ë˜ë„ë¡ í•œë‹¤. B와 Cì˜ í¬ê¸°ëŠ” 바뀔 수 있는ë°, A-B-C-D와 A-C-B-D 둘 ëª¨ë‘ ë‹¤ë¥¸ ì •ë‹µìœ¼ë¡œ 보기 때문ì´ë‹¤. {{{ // // fourgods.cpp // codersHigh2013 // // Created by Jereneal Kim on 13. 8. 6.. // Copyright (c) 2013ë…„ Jereneal Kim. All rights reserved. // #include <iostream> using namespace std; int T,N,M; int arr[501][501]; typedef struct Edge{ int u; int v; }Edge; bool comp(Edge a,Edge b){ if(a.u!=b.u){ return a.u<b.u; }else{ return a.v<b.v; } } int main(int argc, const char * argv[]) { freopen("/Users/jkim/Development/C&C++/codersHigh2013/codersHigh2013/input.txt","r",stdin); int i,j,k,num; scanf("%d",&T); for(int iter=0;iter<T;iter++){ num=0; for(i=0;i<500;i++){ for(j=0;j<500;j++){ arr[i][j] = 0; } }//initalize scanf("%d %d",&N,&M); for(i=0;i<M;i++){ int tmp1,tmp2; scanf("%d %d",&tmp1,&tmp2); arr[tmp2][tmp1] = 1; arr[tmp1][tmp2] = 1; } // get A & C for(i=1;i<=N;i++){ for(k=i+1;k<=N;k++){ int tmpNum=0; for(j=i+1;j<=N;j++){ if(arr[i][j]&&arr[j][k]){ tmpNum++; } } num+=tmpNum*(tmpNum-1)/2; num%=20130728; } } printf("%d\n",num); } return 0; } }}}