• uva -- 10766


    一开始我感觉是模板题  是不想写的 后来发现我的模板上没有 就敲了一遍

       可以忽略这句屁话     在信息学竞赛中,有关生成树的最优化问题如最小生成树等是我们经常遇到的,而对生成树的计数及其相关问题则少有涉及。事实上,生成树的计数是十分有意义的,在许多方面都有着广泛的应用。

      1 #include <stdio.h>
      2 #include <string.h>
      3 #include <iostream>
      4 #include <algorithm>
      5 #include <vector>
      6 #include <queue>
      7 #include <set>
      8 #include <map>
      9 #include <string>
     10 #include <math.h>
     11 #include <stdlib.h>
     12 #include <time.h>
     13 
     14 using namespace std;
     15 
     16 const double eps = 1e-8;
     17 const int MAXN = 110;
     18 int sgn(long double x)
     19 {
     20     if (fabs(x)<eps)
     21     {
     22         return 0;
     23     }
     24     if (x<0)
     25     {
     26         return -1;
     27     }
     28     else
     29     {
     30         return 1;
     31     }
     32 }
     33 
     34 
     35 long double b[MAXN][MAXN];
     36 long double det(long double a[][MAXN],int n)
     37 {
     38     int i,j,k,sign = 0;
     39     long double ret = 1;
     40     for (i = 0;i<n;i++)
     41     {
     42         for (j = 0;j<n;j++)
     43         {
     44             b[i][j] = a[i][j];
     45         }
     46     }
     47     for (i = 0;i<n;i++)
     48     {
     49         if (sgn(b[i][i]==0))
     50         {
     51             for (j = i+1;j<n;j++)
     52             {
     53                 if (sgn(b[j][i])!=0)
     54                 {
     55                     break;
     56                 }
     57             }
     58             if (j==n)
     59             {
     60                 return 0;
     61             }
     62             for (k = i;k<n;k++)
     63             {
     64                 swap(b[i][k],b[j][k]);
     65             }
     66             sign++;
     67         }
     68         ret *= b[i][i];
     69         for (k = i+1;k<n;k++)
     70         {
     71             b[i][k]/=b[i][i];
     72         }
     73         for (j = i+1;j<n;j++)
     74         {
     75             for (k = i+1;k<n;k++)
     76             {
     77                 b[j][k] -= b[j][i]*b[i][k];
     78             }
     79         }
     80     }
     81     if (sign&1) ret = -ret;
     82     return ret;
     83 }
     84 long double a[MAXN][MAXN];
     85 int g[MAXN][MAXN];
     86 int main()
     87 {
     88     int n,m;
     89     int u,v;
     90     int k;
     91     while (~scanf("%d%d%d",&n,&m,&k))
     92     {
     93         memset(g,0,sizeof(g));
     94         while (m--)
     95         {
     96             scanf("%d%d",&u,&v);
     97             u--; v--;
     98             g[u][v] = g[v][u] = 1;
     99         }
    100         memset(a,0,sizeof(a));
    101         for (int i = 0;i<n;i++)
    102         {
    103             for (int j = 0;j<n;j++)
    104             {
    105                 if (i!=j&&g[i][j]==0)
    106                 {
    107                     a[i][i]++;
    108                     a[i][j] = -1;
    109                 }
    110             }
    111         }
    112         double ans = det(a,n-1);
    113         printf("%.0lf
    ",ans);
    114     }
    115 
    116 }
    代码君
    爱程序 不爱bug 爱生活 不爱黑眼圈 我和你们一样 我和你们不一样 我不是凡客 我要做geek
  • 相关阅读:
    淘宝API学习之道:淘宝TOP之API接口接入教程
    hdu 2952 Counting Sheep
    【Java 虚拟机探索之路系列】:JIT编译器
    Android Afinal框架学习(一) FinalDb 数据库操作
    class、interface、struct的差别
    13个Cat命令管理文件实例汇总
    Linux df 命令用法示例
    九个uname命令获取Linux系统详情的实例
    Linux中查看进程的多线程
    精通Linux的“kill”命令
  • 原文地址:https://www.cnblogs.com/yifi/p/4567363.html
Copyright © 2020-2023  润新知