Title Link: http://poj.org/problem?id=3687
Pay attention to the heavy edges
Code:
#include <stdio.h>#include <ctime>#include <math.h>#include <limits.h>#include <complex>#include <string>#include <functional>#include <iterator>#include <algorithm>#include <vector>#include <stack>#include <queue>#include <set>#include <map>#include <list>#include <bitset>#include <sstream>#include <iomanip>#include <fstream>#include <iostream>#include <ctime>#include <cmath>#include <cstring>#include <cstdio>#include <time.h>#include <ctype.h>#include <string.h>#include <assert.h>using namespace STD;intin[ About];intJsx About][ About];intans[ About];intN, M;intMain () {intTintN, M;scanf("%d", &t); while(t--) {memset(In,0,sizeof(in));memset(IS,0,sizeof(is));memset(ANS,0,sizeof(ans));scanf("%d%d", &n, &m);intOK =1;intA, B; while(m--) {scanf("%d%d", &a, &b);if(A = = b) OK =0;if(Is[a][b] = =1) OK =0;if(Is[b][a] = =0) in[a]++; Is[b][a] =1; }intnum =1;intCNT =0;if(!ok)puts("-1");Else{ for(intK = N;k >=1; k--) {inti = n; while(In[i]! =0&& i>=1) i--; In[i] =-1; ans[i] = k;if(I >=1) cnt++; for(intj =1; J <= n;j++) {if(Is[i][j]) in[j]--; } }if(cnt! = N)puts("-1");Else{ for(inti =1; i < n;i++)printf("%d", Ans[i]);printf("%d\n", Ans[n]); } } }return 0;}
Copyright NOTICE: Reprint please indicate the source.
POJ 3687 Labeling Balls "topological sort"