zoukankan      html  css  js  c++  java
  • uva 11748 Rigging Elections

    题意:有n个竞选人,由m个人投票,每个人对竞选人都有一个排名,每次两个人竞选,m个人分别投票,每次两个人,胜利者继续参与竞选,失败者淘汰,剩余一个人的时候停止你希望让c最后获得胜利

    ,你可以安排每次参与竞选的两个竞选人,问是否有可能让c竞选成功

    分析:胜利者向失败者连一条有向边,那么问题就转化为从c出发,是否能顺边访问所有的点,一次dfs遍历就行了

    简图的时候,不是按照输入记录,记录竞选人在投票人心目中的排名,这样最后便于建图

    #include<iostream>
    #include<Cstdio>
    #include<cstring>
    #include<algorithm>
    #include<vector>
    using namespace std;
    const int maxn=105;
    
    int d[maxn][maxn],n,m,c,x,vis[maxn];
    vector<int> G[maxn];
    
    void dfs(int u){
        vis[u]=1;
        for(int i=0;i<G[u].size();i++){
            int v=G[u][i];
            if(!vis[v])
              dfs(v);
        }
    }
    
    int main(){
        while(~scanf("%d%d%d",&n,&m,&c)&&n+m+c){
            for(int i=1;i<=m;i++)
                  for(int j=1;j<=n;j++){
                  scanf("%d",&x);
                  d[i][x]=j;
                  }
            for(int i=1;i<=n;i++)G[i].clear();
    
            for(int i=1;i<=n;i++)
              for(int j=i+1;j<=n;j++){
                  int cnt=0;
                  for(int k=1;k<=m;k++)
                    if(d[k][i]<d[k][j])
                      cnt++;
                  if(cnt>m/2)
                    G[i].push_back(j);
                  else
                    G[j].push_back(i);
              }
            
            memset(vis,0,sizeof(vis));
            dfs(c);
            int cnt=0;
            for(int i=1;i<=n;i++)
              if(vis[i])
                cnt++;
            if(cnt==n)
              puts("yes");
            else
              puts("no");
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Jmeter的几种参数化方式
    selenium实现原理
    python问题
    跨域问题的解决方案
    jquery的ajax的语法
    给JavaScript 对象添加方法
    循环遍历对象的属性
    Function专题 以及js的预解析理解
    如何理解javascript中类和对象这两个概念?
    封装原生ajax
  • 原文地址:https://www.cnblogs.com/jihe/p/5338780.html
Copyright © 2011-2022 走看看