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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【拓扑排序】【DP】奖金(ssl 1325)

發布時間:2023/12/3 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【拓扑排序】【DP】奖金(ssl 1325) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

獎金

ssl 1325

題目大意:

有n個人,某個人要比另外一個人的工資高(工資最低為100,最少多1元),問最少發多少工資

原題:

題目描述

由于無敵的凡凡在2005年世界英俊帥氣男總決選中勝出,Yali Company總經理Mr.Z心情好,決定給每位員工發獎金。公司決定以每個人本年在公司的貢獻為標準來計算他們得到獎金的多少。
于是Mr.Z下令召開m方會談。每位參加會談的代表提出了自己的意見:“我認為員工a的獎金應該比b高!”Mr.Z決定要找出一種獎金方案,滿足各位代表的意見,且同時使得總獎金數最少。每位員工獎金最少為100元。

輸入

兩個整數n,m,表示員工總數和代表數;
以下m行,每行2個整數a,b,表示某個代表認為第a號員工獎金應該比第b號員工高。

輸出

若無法找到合法方案,則輸出“-1”;否則輸出一個數表示最少總獎金。

輸出樣例

2 1 1 2

輸入樣例

201

數據范圍:

80%的數據滿足n<=1000,m<=2000;
100%的數據滿足n<=10000,m<=20000。

解題思路:

這就是拓撲排序,先按順序拓撲排序一遍,中途順便DP(以100為低值),因為要求最小所以一定是上一個數+1,然后有多個條件是就要求最大的

代碼:

#include<queue> #include<cstdio> #include<cstring> #include<iostream> using namespace std; int n,m,x,y,h,tot,sum,rd[10500],head[10500],ans[10500]; struct rec {int to,next; }a[20500]; void topsort()//拓撲排序 {queue<int>d;for (int i=1;i<=n;++i)if (!rd[i]) d.push(i),ans[i]=100;//入度為0的while(!d.empty()){h=d.front();d.pop();for (int i=head[h];i;i=a[i].next){rd[a[i].to]--;ans[a[i].to]=max(ans[h]+1,ans[a[i].to]);//取最大if (!rd[a[i].to])//入度為0{rd[a[i].to]--;d.push(a[i].to);}}} } int main() {scanf("%d %d",&n,&m);for (int i=1;i<=m;++i){scanf("%d %d",&x,&y);a[++tot].to=x;a[tot].next=head[y];head[y]=tot;rd[x]++;}topsort();for (int i=1;i<=n;++i)if (rd[i]<=0) sum+=ans[i];//符合else{sum=-1;//存在環break;}printf("%d",sum); }

總結

以上是生活随笔為你收集整理的【拓扑排序】【DP】奖金(ssl 1325)的全部內容,希望文章能夠幫你解決所遇到的問題。

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