【BZOJ5037】[Jsoi2014]電信網路 最大權閉合圖

來源:互聯網
上載者:User

標籤:inf   平面   log   clu   正數   lin   投資   getc   bfs   

【BZOJ5037】[Jsoi2014]電信網路DescriptionJYY建立的電信公司,壟斷著整個JSOI王國的電信網路。JYY在JSOI王國裡建造了很多的通訊基站。目前所有的基站都是使用2G網路系統的。而現在3G時代已經到來了,JYY在思考,要不要把一些基站升級成3G網路的呢?JSOI王國可以被看作為一個無窮大的二維平面,JYY一共建造了N個通訊基站,第i個基站的座標是(Xi,Yi)。每個基站有一個通訊範圍Ri。第i號基站會向所有到其距離不超過Ri的基站發送資訊。每個基站升級到3G網路都會有一個收益Si,這個收益可能是正數(比如基站附近有個大城市,使用者很多,賺的流量費也就很多了),也可能是負數(比如基站周圍市場不佳,收益不能填補升級基站本身的投資)。此外,由於原有的使用2G網路系統的基站無法解析從升級成3G網路系統的基站所發來的資訊(但是升級之後的基站是可以解析未升級基站發來的資訊的),所以,JYY必須使得,在升級工作全部完成之後,所有使用3G網路的基站,其通訊範圍內的基站,也都是使用3G網路的。由於基站數量很多,你可以協助JYY計算一下,他通過升級基站,最多能獲得的收益是多少嗎?Input第一行一個整數N;接下來N行,每行4個整數,Xi,Yi,Ri,Si,表示處在(Xi,Yi)的基站的通訊範圍是Ri,升級可以獲得的收益是Si。資料滿足任意兩個基站的座標不同。1≤N≤500,1≤Ri≤20000,|Xi|,|Yi|,|Si|≤10^4。Output

 輸出一行一個整數,表示可以獲得的最大收益。

Sample Input5
0 1 7 10
0 -1 7 10
5 0 1 -15
10 0 6 10
15 1 2 -20Sample Output5
【範例說明】
我們可以將前三座基站升級成 3G 網路,以獲得最佳收益。

題解:顯然是一個最大權閉合圖的模型,直接上建圖方法:

1.S->所有正權的點 容量:該點權權值
2.所有負權的點->T 容量:該點權值相反數
3.點>所有它能發射到的點 容量:inf

#include <cstdio>#include <iostream>#include <cstring>#include <queue>using namespace std;int n,cnt,ans,S,T;int x[510],y[510],r[510],s[510];int to[1000000],next[1000000],val[1000000],head[510],d[510];queue<int> q;inline int rd(){int ret=0,f=1;char gc=getchar();while(gc<‘0‘||gc>‘9‘){if(gc==‘-‘)f=-f;gc=getchar();}while(gc>=‘0‘&&gc<=‘9‘)ret=ret*10+gc-‘0‘,gc=getchar();return ret*f;}void add(int a,int b,int c){to[cnt]=b,val[cnt]=c,next[cnt]=head[a],head[a]=cnt++;to[cnt]=a,val[cnt]=0,next[cnt]=head[b],head[b]=cnt++;}int dfs(int x,int mf){if(x==T)return mf;int i,k,temp=mf;for(i=head[x];i!=-1;i=next[i]){if(d[to[i]]==d[x]+1&&val[i]){k=dfs(to[i],min(val[i],temp));if(!k)d[to[i]]=0;val[i]-=k,val[i^1]+=k,temp-=k;if(!temp)break;}}return mf-temp;}int bfs(){while(!q.empty())q.pop();memset(d,0,sizeof(d));q.push(S),d[S]=1;int i,u;while(!q.empty()){u=q.front(),q.pop();for(i=head[u];i!=-1;i=next[i]){if(!d[to[i]]&&val[i]){d[to[i]]=d[u]+1;if(to[i]==T)return 1;q.push(to[i]);}}}return 0;}int main(){n=rd(),S=0,T=n+1;int i,j;memset(head,-1,sizeof(head));for(i=1;i<=n;i++){x[i]=rd(),y[i]=rd(),r[i]=rd(),s[i]=rd();if(s[i]>0)ans+=s[i],add(S,i,s[i]);elseadd(i,T,-s[i]);}for(i=1;i<=n;i++){for(j=1;j<=n;j++)if(i!=j&&(x[i]-x[j])*(x[i]-x[j])+(y[i]-y[j])*(y[i]-y[j])<=r[i]*r[i])add(i,j,1<<30);}while(bfs())ans-=dfs(S,1<<30);printf("%d",ans);return 0;}

【BZOJ5037】[Jsoi2014]電信網路 最大權閉合圖

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.