日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

COJ 1081 集训队分组

發(fā)布時間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 COJ 1081 集训队分组 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1081

不是太會寫拓撲排序,所以再寫一遍。

/*Accepted 880 kb 268 ms C++/ 1671 B 2012-07-29 17:08:30*/ #include<cstdio> #include<cstring> #include<cstdlib>const int MAXN = 1 << 10; const int MAXM = 10010;int N, K, M, first[MAXN], e, next[MAXM], v[MAXM]; int topo[MAXN], cnt, vis[MAXN];void addedge(int x, int y) {v[e] = y;next[e] = first[x], first[x] = e ++; }void ReadGraph() {int i, x, y;memset(first, -1, sizeof first);e = 0;for(i = 0; i < M; i ++){scanf("%d%d", &x, &y);addedge(x, y);} }void dfs(int cur) {int i;vis[cur] = 1;for(i = first[cur]; i != -1; i = next[i])if(!vis[v[i]])dfs(v[i]);topo[cnt --] = cur; }void toposort() {int i;cnt = N;memset(vis, 0, sizeof vis);for(i = 1; i <= N; i ++)if(!vis[i])dfs(i); }void Search(int cur) {int i;vis[cur] = 1;for(i = first[cur]; i != -1; i = next[i])if(!vis[v[i]])Search(v[i]); }bool judge() {int i, j;for(i = 1; i <= K; i ++){memset(vis, 0, sizeof vis);Search(topo[i]);for(j = K + 1; j <= N; j ++)if(!vis[topo[j]])return false;}return true; }int main() {while(scanf("%d%d%d", &N, &K, &M) == 3){ReadGraph();toposort();bool ok = judge();if(ok)printf("YES\n");elseprintf("NO\n");}return 0; }

?

轉載于:https://www.cnblogs.com/Yu2012/archive/2012/07/29/2614133.html

總結

以上是生活随笔為你收集整理的COJ 1081 集训队分组的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。