zoukankan      html  css  js  c++  java
  • poj 3275(传递闭包)

    题目链接:http://poj.org/problem?id=3275

    思路:对于n个节点,共有n*(n-1)/2对关系,对于给出的m对已经确定的关系,我们可以用传递闭包推出目前已经确定的关系对数ans,于是答案就是n*(n-1)/2-ans.

     1 #include<iostream>
     2 #include<cstdio>
     3 #include<cstring>
     4 #include<algorithm>
     5 #include<vector>
     6 using namespace std;
     7 #define MAXN 1010
     8 
     9 vector<vector<int> >G_from;
    10 vector<vector<int> >G_to;
    11 bool map[MAXN][MAXN];
    12 
    13 int main()
    14 {
    15     int n,m,u,v,ans;
    16     while(~scanf("%d%d",&n,&m)){
    17         G_from.clear();G_from.resize(n+2);
    18         G_to.clear();G_to.resize(n+2);
    19         memset(map,false,sizeof(map));
    20         while(m--){
    21             scanf("%d%d",&u,&v);
    22             map[u][v]=true;
    23             G_from[v].push_back(u);
    24             G_to[u].push_back(v);
    25         }
    26         ans=0;
    27         for(int k=1;k<=n;k++){
    28             for(int i=0;i<G_from[k].size();i++){
    29                 for(int j=0;j<G_to[k].size();j++){
    30                     u=G_from[k][i],v=G_to[k][j];
    31                     if(!map[u][v]){
    32                         map[u][v]=true;
    33                         G_from[v].push_back(u);
    34                         G_to[u].push_back(v);
    35                     }
    36                 }
    37             }
    38         }
    39         for(int i=1;i<=n;i++){
    40             for(int j=1;j<=n;j++)if(i!=j){
    41                 if(map[i][j])ans++;
    42             }
    43         }
    44         printf("%d
    ",n*(n-1)/2-ans);
    45     }
    46     return 0;
    47 }
    View Code
  • 相关阅读:
    php简单实现MVC
    windows获取窗口句柄
    UPX编译及so加固
    Markdown: Syntax
    Markdown: Syntax Text
    BIOS将MBR读入0x7C00地址处(x86平台下)
    TPFanControl.ini
    深入浅出GNU X86-64 汇编
    CPU vector operations
    Google开源项目风格指南
  • 原文地址:https://www.cnblogs.com/wally/p/3280033.html
Copyright © 2011-2022 走看看