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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

题解报告:hdu 5695 Gym Class(拓扑排序)

發(fā)布時間:2025/4/16 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 题解报告:hdu 5695 Gym Class(拓扑排序) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

題目鏈接:acm.hdu.edu.cn/showproblem.php?pid=5695

Problem Description

眾所周知,度度熊喜歡各類體育活動。
今天,它終于當上了夢寐以求的體育課老師。第一次課上,它發(fā)現(xiàn)一個有趣的事情。在上課之前,所有同學要排成一列, 假設最開始每個人有一個唯一的ID,從1到N,在排好隊之后,每個同學會找出包括自己在內(nèi)的前方所有同學的最小ID,作為自己評價這堂課的分數(shù)。麻煩的是,有一些同學不希望某個(些)同學排在他(她)前面,在滿足這個前提的情況下,新晉體育課老師——度度熊,希望最后的排隊結(jié)果可以使得所有同學的評價分數(shù)和最大。

Input

第一行一個整數(shù)T,表示T(1T30)?組數(shù)據(jù)。
對于每組數(shù)據(jù),第一行輸入兩個整數(shù)NM(1N100000,0M100000),分別表示總?cè)藬?shù)和某些同學的偏好。
接下來M行,每行兩個整數(shù)A?和B(1A,BN),表示ID為A的同學不希望ID為B的同學排在他(她)之前。你可以認為題目保證至少有一種排列方法是符合所有要求的。

Output

對于每組數(shù)據(jù),輸出最大分數(shù) 。

Sample Input

3 1 0 2 1 1 2 3 1 3 1

Sample Output

1 2 6 解題思路:要使得所有同學的評價分數(shù)和最大,必須每次拓撲出最大的id值(采用優(yōu)先隊列最大堆來實現(xiàn)),再保存當前已拓撲的最小id即為隊列中后面學生的課堂分數(shù),并且把每次分數(shù)相加起來即為評價的總分數(shù),水過! AC代碼: 1 #include<bits/stdc++.h> 2 using namespace std; 3 typedef long long LL; 4 const int maxn=100005; 5 vector<int> vec[maxn]; 6 priority_queue<int> que;//默認最大堆,id越靠前的最后的評價分數(shù)將會是最大的 7 int t,n,m,a,b,minid,InDeg[maxn];LL sum;bool flag; 8 void topsort(){ 9 while(!que.empty())que.pop();//清空隊列 10 for(int i=1;i<=n;++i) 11 if(!InDeg[i])que.push(i); 12 flag=false; 13 while(!que.empty()){ 14 int now=que.top();que.pop();//取出當前最大的id,并且出隊 15 if(!flag){minid=now;flag=true;}//開關(guān):記錄第一個拓撲的id值 16 minid=min(minid,now);sum+=minid;//每次更新最小的id,并且加入到sum當中 17 for(size_t i=0;i<vec[now].size();++i)//更新每個鄰接點的入度數(shù) 18 if(--InDeg[vec[now][i]]==0)que.push(vec[now][i]); 19 } 20 } 21 int main(){ 22 scanf("%d",&t); 23 while(t--){ 24 scanf("%d%d",&n,&m);sum=0; 25 memset(InDeg,0,sizeof(InDeg)); 26 for(int i=1;i<=n;++i)vec[i].clear();//每個鄰接矩陣連接對應清空 27 while(m--){ 28 scanf("%d%d",&a,&b); 29 vec[a].push_back(b);//鄰接表:a指向b 30 InDeg[b]++;//b的入度加1 31 } 32 topsort();printf("%lld\n",sum); 33 } 34 return 0; 35 }

?

轉(zhuǎn)載于:https://www.cnblogs.com/acgoto/p/9313373.html

總結(jié)

以上是生活随笔為你收集整理的题解报告:hdu 5695 Gym Class(拓扑排序)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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