題目概述:
中文題就略了。
大致思路:
顯然這是乙個拓撲排序的問題,不過題中有兩個點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 12using
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個圍成圈的水龍頭,開始它們全都是開啟漏水的。接著你要跟電腦博弈,從電腦開始,雙方可以選擇關閉連續的兩個水龍頭 當然,已關的不能再開啟了 也可以只選擇關掉乙個,...