zoukankan      html  css  js  c++  java
  • 【dfs】BZOJ1703-[Usaco2007 Mar]Ranking the Cows 奶牛排名

    【题目大意】

    农夫约翰有N(1≤N≤1000)头奶牛,每一头奶牛都有一个确定的独一无二的正整数产奶率.约翰想要让这些奶牛按产奶率从高到低排序,约翰已经比较了M(1≤M≤10000)对奶牛的产奶率,但他发现,他还需要再做一张关于另外C对奶牛的产奶率比较,才能推断出所有奶牛的产奶率排序。请帮他确定C的最小值。

    【思路】

    对于M对关系,从产奶率高的往产奶率低的连一条有向边。对于每个节点i,它能抵达的节点的总数即是能比较得出的比它小的奶牛总数。

    由于原本总共有N*(N-1)/2对关系,ans=N*(N-1)/2-Σ从该头奶牛能抵达的节点总数。

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 const int MAXN=1000+5;
     4 int n,m,ans,tmp;
     5 int vis[MAXN];
     6 vector<int> E[MAXN];
     7 
     8 void dfs(int u,int T)
     9 {
    10     for (int i=0;i<E[u].size();i++)
    11     {
    12         int v=E[u][i];
    13         if (vis[v]!=T)
    14         {
    15             tmp++;
    16             vis[v]=T;
    17             dfs(v,T);
    18         }
    19     }
    20 }
    21 
    22 void init()
    23 {
    24     scanf("%d%d",&n,&m);
    25     for (int i=1;i<=m;i++)
    26     {
    27         int u,v;
    28         scanf("%d%d",&u,&v);
    29         E[u].push_back(v);
    30     }
    31 }
    32 
    33 void solve()
    34 {
    35     ans=0;
    36     memset(vis,0,sizeof(vis));
    37     for (int i=1;i<=n;i++)
    38     {
    39         tmp=0;
    40         dfs(i,i);
    41         ans+=tmp;
    42     }
    43     ans=(n-1)*n/2-ans;
    44     printf("%d
    ",ans);
    45 }
    46 
    47 int main()
    48 {
    49     init();
    50     solve();
    51     return 0;
    52 } 
  • 相关阅读:
    springboot热部署
    maven换仓库地址
    floyd求最小环+例题(hdu1599)
    矩阵乘法+folyd(hdu2807)
    TSP问题+例题
    迪杰斯特拉模板题(迪杰斯特拉模板)
    小w的糖果
    DongDong坐飞机
    DongDong跳一跳
    主席树入门
  • 原文地址:https://www.cnblogs.com/iiyiyi/p/6079204.html
Copyright © 2011-2022 走看看