zoukankan      html  css  js  c++  java
  • poj3660 最短路/拓扑序

    题意:有n头牛,为了给牛排顺序,给出了牛之间的胜负关系,具有传递性,问给出的胜负关系是否可以给这些牛排出唯一的顺序。

    其实是个拓扑排序问题,牛的胜负关系就是有向边,然后判断是否有唯一的拓扑序就行。当然,也可以考虑每头牛若比它强的牛数和比它弱的牛数总和确定是n-1个,那么这头牛的位置就可以唯一确定,那么如果 n 头牛的位置都可以唯一确定,顺序也就可以唯一确定了,所以建立 u 胜 v 的单向边,然后通过 floyd 直接求出所有点的最短路关系, u 到 v 有最短路说明 u 胜 v , v 负 u ,然后统计每一头牛的最短路,和其他牛到它的最短路总数,若为 n - 1 则可以确定该牛名次,然后也可以得出结论。

     1 #include<stdio.h>
     2 #include<string.h>
     3 
     4 int g[105][105];
     5 
     6 int main(){
     7     int n,m;
     8     while(scanf("%d%d",&n,&m)!=EOF){
     9         int a,b,i,j,k;
    10         memset(g,0,sizeof(g));
    11         for(i=1;i<=m;i++){
    12             scanf("%d%d",&a,&b);
    13             g[a][b]=1;
    14         }
    15         for(k=1;k<=n;k++){
    16             for(j=1;j<=n;j++){
    17                 for(i=1;i<=n;i++){
    18                     if(g[i][k]&&g[k][j])g[i][j]=1;
    19                 }
    20             }
    21         }
    22         int ans=0;
    23         for(i=1;i<=n;i++){
    24             int t=0;
    25             for(j=1;j<=n;j++){
    26                 if(g[i][j])t++;
    27                 if(g[j][i])t++;
    28             }
    29             if(t==n-1)ans++;
    30         }
    31         printf("%d
    ",ans);
    32     }
    33     return 0;
    34 }
    View Code
  • 相关阅读:
    myeclipse关掉references
    eclipse/myeclipse SVN资源库URL中文乱码问题解决办法
    获取登录用户ip
    MySQL高级 之 explain执行计划详解(转)
    代码部署工具walle(一)
    mongodb备份策略
    nginx报错整理
    记一次java程序占用cpu超高排查
    HDFS恢复误删操作的方法
    有趣的工具
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4785217.html
Copyright © 2011-2022 走看看