标签:tchar over status imp log == decided should family
Network of Byteland consists of n servers, connected by m optical cables. Each cable connects two servers and can transmit data in both directions. Two servers of the network are especially important --- they are connected to global world network and president palace network respectively.
The server connected to the president palace network has number 1, and the server connected to the global world network has number n.
Recently the company Max Traffic has decided to take control over some cables so that it could see what data is transmitted by the president palace users. Of course they want to control such set of cables, that it is impossible to download any data from the global network to the president palace without transmitting it over at least one of the cables from the set.
To put its plans into practice the company needs to buy corresponding cables from their current owners. Each cable has some cost. Since the company‘s main business is not spying, but providing internet connection to home users, its management wants to make the operation a good investment. So it wants to buy such a set of cables, that cables mean cost} is minimal possible.
That is, if the company buys k cables of the total cost c, it wants to minimize the value of c/k.
Any two servers are connected by at most one cable. No cable connects a server to itself. The network is guaranteed to be connected, it is possible to transmit data from any server to any other one.
There is an empty line between each cases.Input | Output |
6 8 1 2 3 1 3 3 2 4 2 2 5 2 3 4 2 3 5 2 5 6 3 4 6 3 |
4 3 4 5 6 |
4 5 1 2 2 1 3 2 2 3 1 2 4 2 3 4 2 |
3 1 2 3 |
阿尔分红
卷三公分iiuaghsf
iugafi
include<cmath> #include<cstdio> #include<cstring> #include<iostream> using namespace std; typedef double real; const real eps=1e-6; const int Z=1e3+5,N=1e4+5,M=1e5+5; struct data{int u,v,w;}a[Z]; struct edge{int v,next;real cap;}e[M];int tot=1,head[N]; int n,m,S,T,cas,num,g[Z],dis[N],q[M];bool vis[Z]; real L,R,ans; inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();} while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();} return x*f; } inline int dcmp(real x){ if(fabs(x)<eps) return 0; return x>0?1:-1; } inline void add(int x,int y,real z){ e[++tot].v=y;e[tot].cap=z;e[tot].next=head[x];head[x]=tot; e[++tot].v=x;e[tot].cap=z;e[tot].next=head[y];head[y]=tot; } inline bool bfs(){ for(int i=S;i<=T;i++) dis[i]=-1; int h=0,t=1;q[t]=S;dis[S]=0; while(h!=t){ int x=q[++h]; for(int i=head[x];i;i=e[i].next){ if(dcmp(e[i].cap)>0&&dis[e[i].v]==-1){ dis[e[i].v]=dis[x]+1; if(e[i].v==T) return 1; q[++t]=e[i].v; } } } return 0; } real dfs(int x,real f){ if(x==T) return f; real used=0,t; for(int i=head[x];i;i=e[i].next){ if(dcmp(e[i].cap)>0&&dis[e[i].v]==dis[x]+1){ t=dfs(e[i].v,min(e[i].cap,f)); e[i].cap-=t;e[i^1].cap+=t; used+=t;f-=t; if(!f) return used; } } if(!used) dis[x]=-1; return used; } inline real dinic(){ real res=0; while(bfs()) res+=dfs(S,2e9); return res; } inline void init(){ m=read();L=0;R=0;num=0;S=1;T=n; for(int i=1;i<=m;i++) a[i].u=read(),a[i].v=read(),a[i].w=read(),R+=a[i].w; } inline real rebuild(real s){ tot=1;memset(head,0,n+1<<2); real tans=0; for(int i=1;i<=m;i++){ if(a[i].w>s){ add(a[i].u,a[i].v,a[i].w-s); } else tans+=a[i].w-s; } return tans+dinic(); } inline real binary_search(){ real mid,now; while(dcmp(R-L)>0){ mid=(L+R)/2; now=rebuild(mid); if(dcmp(now)>0) L=mid; else R=mid; } return mid; } void DFS(int x){ vis[x]=1; for(int i=head[x];i;i=e[i].next){ if(!vis[e[i].v]&&dcmp(e[i].cap)>0){ DFS(e[i].v); } } } inline void work(){ ans=binary_search(); memset(vis,0,n+1<<2); //rebuild(ans); DFS(S); for(int i=1;i<=m;i++){ if(vis[a[i].u]+vis[a[i].v]==1||a[i].w<ans){ g[++num]=i; } } if(cas++) putchar(‘\n‘); printf("%d\n",num); for(int i=1;i<num;i++) printf("%d ",g[i]); if(num) printf("%d",g[num]); putchar(‘\n‘); } int main(){ while(~scanf("%d",&n)) init(),work(); return 0; }
标签:tchar over status imp log == decided should family
原文地址:http://www.cnblogs.com/shenben/p/6606463.html