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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

bzoj 4010 菜肴制作

發(fā)布時(shí)間:2025/5/22 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 bzoj 4010 菜肴制作 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目大意:

N 道菜肴,1到N的順序編號(hào)

某些菜肴必須在另一些菜肴之前制作,具體的,一共有 M 條形如”i 號(hào)菜肴'必須'先于 j 號(hào)菜肴制作“的限制,我們將這樣的限制簡(jiǎn)寫(xiě)為<i,j>。

(1)在滿足所有限制的前提下,1 號(hào)菜肴”盡量“優(yōu)先制作

(2)在滿足所有限制,1號(hào)菜肴”盡量“優(yōu)先制作的前提下,2號(hào)菜肴”盡量“優(yōu)先制作

(3)在滿足所有限制,1號(hào)和2號(hào)菜肴”盡量“優(yōu)先的前提下,3號(hào)菜肴”盡量“優(yōu)先制作

(4)在滿足所有限制,1 號(hào)和 2 號(hào)和 3 號(hào)菜肴”盡量“優(yōu)先的前提下,4 號(hào)菜肴”盡量“優(yōu)先制作

(5)以此類推

思路:

因?yàn)橐剐〉谋M量靠前,所以我們?cè)谕負(fù)渑判虻臅r(shí)候要加一些處理:

反向建圖,致敬GODV

使圖的字典序最大

然后再反過(guò)來(lái)輸出,無(wú)解的情況為無(wú)入度為零的點(diǎn)或跑完一邊答案數(shù)量小于n

1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cmath> 5 #include<cstring> 6 #include<cstdlib> 7 #include<set> 8 #include<map> 9 #include<vector> 10 #include<stack> 11 #include<queue> 12 #define ll long long 13 #define inf 2147383611 14 #define MAXN 100100 15 using namespace std; 16 inline int read() 17 { 18 int x=0,f=1; 19 char ch;ch=getchar(); 20 while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();} 21 while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();} 22 return x*f; 23 } 24 int n,m,next[MAXN*2],first[MAXN],to[MAXN*2],ind[MAXN]; 25 int cnt,rank[MAXN]; 26 void add(int u,int v) {next[++cnt]=first[u],first[u]=cnt,to[cnt]=v,ind[v]++;} 27 priority_queue <int> q; 28 int main() 29 { 30 int T; 31 T=read(); 32 while(T--) 33 { 34 cnt=0; 35 memset(first,0,sizeof(first)); 36 memset(next,0,sizeof(next)); 37 memset(ind,0,sizeof(ind)); 38 memset(to,0,sizeof(to)); 39 n=read(),m=read(); 40 int a,b; 41 while(m--) {a=read(),b=read();add(b,a);} 42 for(int i=1;i<=n;i++) if(!ind[i]) q.push(i); 43 cnt=0; 44 if(q.empty()) {printf("Impossible!\n");continue;} 45 while(!q.empty()) 46 { 47 int k=q.top();q.pop(); 48 for(int i=first[k];i;i=next[i]) 49 { 50 ind[to[i]]--; 51 if(!ind[to[i]]) q.push(to[i]); 52 } 53 rank[++cnt]=k; 54 } 55 if(cnt!=n) {printf("Impossible!\n");while(!q.empty()) q.pop();continue;} 56 for(int i=cnt;i>=1;i--) printf("%d ",rank[i]); 57 printf("\n"); 58 } 59 } View Code

轉(zhuǎn)載于:https://www.cnblogs.com/yyc-jack-0920/p/7756373.html

總結(jié)

以上是生活随笔為你收集整理的bzoj 4010 菜肴制作的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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