zoukankan      html  css  js  c++  java
  • bzoj1703[Usaco2007 Mar]Ranking the Cows 奶牛排名*

    bzoj1703[Usaco2007 Mar]Ranking the Cows 奶牛排名

    题意:

    n头奶牛,知道n对奶牛之间的产奶量大小,问想知道所有奶牛产奶量大小顺序至少还需知道几对。n≤1000。

    题解:

    每个大小关系看为一条有向边,对每头奶牛进行dfs,求每头奶牛可以到的奶牛数和可以到它的奶牛数之和,用n-1减后就是需要和它比较的奶牛数。最后输出(n*(n-1)-所有牛的结果相加)/2即可。

    代码:

     1 #include <cstdio>
     2 #include <cstring>
     3 #include <algorithm>
     4 #include <queue>
     5 #define inc(i,j,k) for(int i=j;i<=k;i++)
     6 #define maxn 1010
     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 struct e{int t,n;}es[maxn*10]; int g[maxn],ess;
    16 void pe(int f,int t){es[++ess]=(e){t,g[f]}; g[f]=ess;}
    17 int f[maxn*10],t[maxn*10],n,m,sum[maxn],ans; bool vis[maxn];
    18 void dfs(int x,int s){
    19     for(int i=g[x];i;i=es[i].n)if(!vis[es[i].t])sum[s]++,vis[es[i].t]=1,dfs(es[i].t,s);
    20 }
    21 int main(){
    22     n=read(); m=read(); inc(i,1,m)f[i]=read(),t[i]=read(),pe(f[i],t[i]);
    23     inc(i,1,n){memset(vis,0,sizeof(vis)); dfs(i,i);} ess=0; memset(g,0,sizeof(g));
    24     inc(i,1,m)pe(t[i],f[i]); inc(i,1,n){memset(vis,0,sizeof(vis)); dfs(i,i);}
    25     ans=n*(n-1); inc(i,1,n)ans-=sum[i]; printf("%d",ans/2); return 0;
    26 }

    20160927

  • 相关阅读:
    前端学HTTP之重定向和负载均衡
    前端学HTTP之Web主机托管
    前端学HTTP之内容协商
    前端学HTTP之字符集
    前端学HTTP之实体和编码
    前端学HTTP之安全HTTP
    前端学HTTP之摘要认证
    前端学HTTP之基本认证
    前端学HTTP之客户端识别和cookie
    前端学HTTP之网关、隧道和中继
  • 原文地址:https://www.cnblogs.com/YuanZiming/p/5966678.html
Copyright © 2011-2022 走看看