HDOJ1811解題報告 拓撲排序 正向反向

2022-03-01 10:48:56 字數 2176 閱讀 1233

題目概述:

中文題就略了。

大致思路:

顯然這是乙個拓撲排序的問題,不過題中有兩個點rating相等的情況,我們發現因為不關心最後的排序結果,所以用並查集合並一下相等的點這時候就是求乙個有向圖的拓撲序了。

題中conflict的情況是圖中有環,uncertain的情況是所求排序不唯一,此時只需要將有向圖反向,再求一遍拓撲序對比一下之前求的拓撲序,如果有差異則說明情況為uncertain,否則為ok。

**:

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12

using

namespace

std;

1314

#define sacnf scanf

15#define scnaf scanf

16#define maxn 10010

17#define maxm 26

18#define inf 1061109567

19#define eps 0.00001

20const

double pi=acos(-1.0

);21

#define mod 1000033

22#define maxnum 10000

23void swap(int &a,int &b)

24int abs(int x)

25 typedef long

long

ll;26 typedef unsigned int

uint;27

28struct

node

29 edge[maxn];

3334 vectorg[maxn];

35int

in[maxn],ans[maxn],p[maxn],cnt,equals;

3637

int found(int x)

3839

void toposort(int

n)4056}

57}5859

void re_toposort(int

n)60

62 priority_queue,greater >q;

63for(int i=0;i)

64if(i==p[i]&&!in

[i]) q.push(i);

65while(!q.empty())

6669

int len=g[u].size();

70for(int i=0;i)

7176

}77 printf("

ok\n");

78}7980

intmain()

8189

int a,c;char b;equals=0;90

for(int i=1;i<=m;i++)

9199

}100

}101

for(int i=1;i<=m;i++)

102106

else

if(b=='

>

') 107

}108

/*for(int i=0;i109

116printf(" %d\n",in[i]);

117}

*/118

toposort(n);

119for(int i=0;iin[i]=0

;}120

for(int i=1;i<=m;i++)

121125

else

if(b=='

>

') 126

}127

re_toposort(n);

128}

129//

clock_t ed=clock();

130//

printf("\n\ntime used : %.5lf ms.\n",(double)(ed-st)/clocks_per_sec);

131return0;

132 }

hdoj 1153 解題報告

題目意思 有乙個城鎮,它的所有街道都是單行的,並且每條街道都是和兩個路口相連。同時已知街道不會形成迴路。你的任務是編寫程式求最小數量的傘兵,這些傘兵可以訪問 visit 所有的路口。對於傘兵的起始降落點不做限制。解題思路 這個題轉化成求dag圖的最小路徑覆蓋數 節點數 最大匹配數。其中求最大匹配是關...

HDOJ 1047解題報告

練習acm後的第一篇解題報告。這題是求大數階乘的,題目要求最大能求10000的階乘。剛一看到這題,感覺思路很簡單,思考了一會之後就開始寫 思路很簡單,由於是大數乘法,普通的int型別肯定不夠用,要用陣列儲存。然後運算過程就是最簡單的乘法運算過程,乘 移位 加 的簡單過程。提交之後一直是tle,悲劇,...

HDOJ 3951 Coin Game 解題報告

2011年8月18日,阿里巴巴程式設計公開賽a題。本題類似我曾今玩過的的乙個nds解密遊戲 雷頓教授與魔神之笛 裡的一道謎題。遊戲裡是給你15個圍成圈的水龍頭,開始它們全都是開啟漏水的。接著你要跟電腦博弈,從電腦開始,雙方可以選擇關閉連續的兩個水龍頭 當然,已關的不能再開啟了 也可以只選擇關掉乙個,...