bzoj1745[Usaco2005 oct]Flying Right 飞行航班*
生活随笔
收集整理的這篇文章主要介紹了
bzoj1745[Usaco2005 oct]Flying Right 飞行航班*
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
bzoj1745[Usaco2005 oct]Flying Right 飛行航班
題意:
n個農(nóng)場,有k群牛要從一個農(nóng)場到另一個農(nóng)場(每群由一只或幾只奶牛組成)飛機(jī)白天從農(nóng)場1到農(nóng)場n,晚上從農(nóng)場n到農(nóng)場1,上面有c個座位,問最多可以滿足多少只牛的要求。n≤10000,k≤50000,c≤100。
題解:
用類似貪心的方法做,現(xiàn)將每個農(nóng)場出發(fā)的牛組織成鏈表。先求早上:當(dāng)飛機(jī)到達(dá)每個農(nóng)場時,先讓到達(dá)的奶牛下機(jī),接著如果飛機(jī)未滿,則將其填滿,之后枚舉剩下的奶牛,如果它們的目的地比坐在飛機(jī)上面的奶牛目的地近,就將其替換為當(dāng)前奶牛,這一過程可以用multiset維護(hù)。晚上所有過程都倒過來再做一次即可。
代碼:
1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <set> 5 #define inc(i,j,k) for(int i=j;i<=k;i++) 6 #define maxn 10010 7 using namespace std; 8 9 inline int read(){ 10 char ch=getchar(); int f=1,x=0; 11 while(ch<'0'||ch>'9'){if(ch=='-')f=-1; ch=getchar();} 12 while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); 13 return f*x; 14 } 15 multiset<int,greater<int> >st1; 16 multiset<int>st2; 17 int n,m,k,now,ans; struct nd{int t,w,n;}nds[2][maxn*5]; int ess[2],g[2][maxn]; 18 int main(){ 19 n=read(); m=read(); k=read(); 20 inc(i,1,n){ 21 int x=read(),y=read(),z=read(); 22 if(x<y)nds[0][++ess[0]]=(nd){y,z,g[0][x]},g[0][x]=ess[0]; 23 else nds[1][++ess[1]]=(nd){y,z,g[1][x]},g[1][x]=ess[1]; 24 } 25 now=0; 26 inc(i,1,m){ 27 if(st1.find(i)!=st1.end()){int x=st1.erase(i); ans+=x; now-=x;} 28 for(int j=g[0][i];j;j=nds[0][j].n){ 29 while(now<k&&nds[0][j].w)st1.insert(nds[0][j].t),nds[0][j].w--,now++; 30 if(now==k){ 31 while(*st1.begin()>nds[0][j].t&&nds[0][j].w) 32 st1.erase(st1.begin()),st1.insert(nds[0][j].t),nds[0][j].w--; 33 } 34 } 35 } 36 now=0; 37 for(int i=m;i>=1;i--){ 38 if(st2.find(i)!=st2.end()){int x=st2.erase(i); ans+=x; now-=x;} 39 for(int j=g[1][i];j;j=nds[1][j].n){ 40 while(now<k&&nds[1][j].w)st2.insert(nds[1][j].t),nds[1][j].w--,now++; 41 if(now==k){ 42 while(*st2.begin()<nds[1][j].t&&nds[1][j].w) 43 st2.erase(st2.begin()),st2.insert(nds[1][j].t),nds[1][j].w--; 44 } 45 } 46 } 47 printf("%d",ans); return 0; 48 }?
20161115
轉(zhuǎn)載于:https://www.cnblogs.com/YuanZiming/p/6068042.html
總結(jié)
以上是生活随笔為你收集整理的bzoj1745[Usaco2005 oct]Flying Right 飞行航班*的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 数美科技 | 黄牛也武装到牙齿,航司怎么
- 下一篇: 电子地图是利用计算机,电子地图制图的运用