bzoj 4010 菜肴制作
生活随笔
收集整理的這篇文章主要介紹了
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)題。
- 上一篇: 大话设计模式Python实现-简单工厂模
- 下一篇: 用webpack构建一个常规项目,好处和