uva11865 - Stream My Contest 最小树形图+二分
来源:互联网 发布:手机屏幕软件 编辑:程序博客网 时间:2024/05/17 06:47
G
Stream My Contest
Input: Standard Input
Output: Standard Output
During 2009 and 2010 ICPC world finals, the contest was webcasted via world wide web. Seeing this, some contest organizers from Ajobdeshdecided that, they will provide a live stream of their contests to every university in Ajobdesh. The organizers have decided that, they will provide best possible service to them. But there are two problems:
1. There is no existing network between universities. So, they need to build a new network. However, the maximum amount they can spend on building the network is C.
2. Each link in the network has a bandwidth. If, the stream’s bandwidth exceeds any of the link’s available bandwidth, the viewers, connected through that link can’t view the stream.
Due to the protocols used for streaming, a viewer can receive stream from exactly one other user (or the server, where the contest is organized). That is, if you have two 128kbps links, you won’t get 256kbps bandwidth, although, if you have a stream of 128kbps, you can stream to any number of users at that bandwidth.
Given C, you have to maximize the minimum bandwidth to any user.
Input
First line of input contains T(≤50), the number of test cases. This is followed by T test cases.
Each test case starts with an integer N,M,C(1≤N≤60,1≤M≤104,1≤C≤109), the number of universities and the number of possible links, and the budget for setting up the network. Each university is identified by an integer between 0 and N-1, where 0 is the server.
Next M lines each contain 4 integers, u,v,b,c(0≤u, v<N, 1≤b, c≤106, u!=v), describing a possible link from university u to university v, that has the bandwidth of b kbps and of cost c. All links are unidirectional.
There is a blank line before each test case.
Output
For each test case, output the maximum bandwidth to stream. If it’s not possible, output “streaming not possible.”.
Sample Input Output for Sample Input
3
3 4 300
0 1 128 100
1 2 256 200
2 1 256 200
0 2 512 300
3 4 500
0 1 128 100
1 2 256 200
2 1 256 200
0 2 512 300
3 4 100
0 1 128 100
1 2 256 200
2 1 256 200
0 2 512 300
128 kbps
256 kbps
streaming not possible.
N个位置编号0-N-1,服务器在位置0,要连接其它位置,给出连接线路的带宽和花费,最后的带宽是所有线路里带宽最小的那个,求在花费C以内的最大带宽。
二分最小带宽,把大于等于这个带宽的边建成图,边权是花费,求最小树形图,如果求出的花费不大于C,说明这个带宽是可以的,否则是不行的。二分到最后就是答案。
#include<cstdio>#include<cstring>#include<algorithm>#include<string>#include<iostream>#include<queue>#include<map>using namespace std;typedef pair<int,int> pii;const int MAXN=65;const int MAXM=40010;const int MAXC=110;const int MAXNODE=100010;const int LOGMAXN=50;const int INF=0x3f3f3f3f;int T,N,M,C;int iw[MAXN],cir[MAXN],vis[MAXN],pre[MAXN];int ans;struct Edge{ int u,v,w,band; bool operator < (const Edge& rhs) const{ return band<rhs.band; }}e[MAXM],tmp[MAXM];bool MDST(int s,int n,int m,Edge* e){ ans=0; while(1){ for(int i=0;i<n;i++) iw[i]=INF; for(int i=0;i<m;i++){ int u=e[i].u,v=e[i].v; if(u!=v&&e[i].w<iw[v]){ iw[v]=e[i].w; pre[v]=u; } } for(int i=0;i<n;i++) if(i!=s&&iw[i]==INF){ return false; } int cid=0; iw[s]=0; memset(vis,-1,sizeof(vis)); memset(cir,-1,sizeof(cir)); for(int i=0;i<n;i++){ ans+=iw[i]; if(ans>C) return false; int v=i; while(vis[v]!=i&&cir[v]==-1&&v!=s){ vis[v]=i; v=pre[v]; } if(vis[v]==i){ for(int u=pre[v];u!=v;u=pre[u]) cir[u]=cid; cir[v]=cid++; } } if(!cid){ if(ans<=C) return true; return false; } for(int i=0;i<n;i++) if(cir[i]==-1){ cir[i]=cid++; } for(int i=0;i<m;i++){ int u=e[i].u,v=e[i].v; e[i].u=cir[u]; e[i].v=cir[v]; if(e[i].u!=e[i].v) e[i].w-=iw[v]; } n=cid; s=cir[s]; }}int main(){ freopen("in.txt","r",stdin); int cas=0; scanf("%d",&T); while(T--){ scanf("%d%d%d",&N,&M,&C); int u,v,w; for(int i=0;i<M;i++) scanf("%d%d%d%d",&e[i].u,&e[i].v,&e[i].band,&e[i].w); sort(e,e+M); for(int i=0;i<M;i++) tmp[i]=e[i]; if(!MDST(0,N,M,tmp)){ printf("streaming not possible.\n"); continue; } int L=0,R=M; while(L+1<R){ int mid=L+(R-L)/2,m=0; for(int i=mid;i<M;i++) tmp[m++]=e[i]; if(MDST(0,N,m,tmp)) L=mid; else R=mid; } printf("%d kbps\n",e[L].band); } return 0;}
- uva11865 - Stream My Contest 最小树形图+二分
- UVA11865[Stream My Contest] 朱刘算法求最小树形图
- uva11865 - Stream My Contest
- UVa 11865 Stream My Contest 二分+最小树形图
- UVA 11865 Stream My Contest (最小树形图 + 二分)
- [UVA 11865]Stream My Contest[最小树形图][二分答案]
- UVA 11865 Stream My Contest(最小树形图+二分)
- UVA 11865 Stream My Contest 二分枚举 + 最小树形图
- UVA 11865 Stream My Contest(最小树形图+二分)
- uva11865 Stream My Contest (朱刘算法+二分)
- light oj 1384 - Stream My Contest (最小树形图+二分)
- 最小树形图uva11865
- LA 1384 Stream My Contest(树形图 + 二分)
- UVA-11865 - Stream My Contest(最小树形图)
- UVA 11865 - Stream My Contest(最小树形图)
- UVA 11865 Stream My Contest(最小树形图,4级)
- UVA 11865 Stream My Contest(最小树形图、朱刘算法)
- uva 11865 - Stream My Contest(二分+有向最小生成树)
- python程序员常见的10个错误-python语言
- concurrentHashMap原理
- 20150226 N1
- 中国Azure媒体服务RESTAPI的Endpoint
- /etc/shadow文件介绍
- uva11865 - Stream My Contest 最小树形图+二分
- iOS性能优化
- Unity3D之UILabel的属性设置
- 操作系统管理内存的机制——为什么要设置虚拟内存?
- 使用SVN和VS2013新建web应用项目工程简易操作流程
- Unity3d-旋转Quaternion、Matrix4x4、 Euler
- OpenGL ES2.0 的三种变量类型(uniform,attribute和varying)
- ubuntu系统liveCD自动安装
- Android图标上显示数字