zoukankan      html  css  js  c++  java
  • SPOJ 104 Highways 最小生成树计数

    题目链接:点击打开链接

    题意:

    给定n个点m条边的无向图,问最小生成树有几个。

    思路:

    模版

    #pragma comment(linker, "/STACK:1024000000,1024000000")
    #include<bits/stdc++.h>
    template <class T>
    inline bool rd(T &ret) {
        char c; int sgn;
        if(c=getchar(),c==EOF) return 0;
        while(c!='-'&&(c<'0'||c>'9')) c=getchar();
        sgn=(c=='-')?-1:1;
        ret=(c=='-')?

    0:(c-'0'); while(c=getchar(),c>='0'&&c<='9') ret=ret*10+(c-'0'); ret*=sgn; return 1; } template <class T> inline void pt(T x) { if (x <0) { putchar('-'); x = -x; } if(x>9) pt(x/10); putchar(x%10+'0'); } using namespace std; typedef long long ll; const int N = 15; ll a[N][N],g[N][N]; void add(int u, int v){ u--; v--; g[u][v] = g[v][u] = 1; } ll DET(int n){ //点标从[0, n) for(int i=0, u;i<n;i++) { u=0; for(int j=0;j<n;j++) if(g[i][j]) u++,a[i][j]=-1; a[i][i]=u; } ll temp=1,t; for(int i=1;i<n;i++) { for(int j=i+1;j<n;j++) while(a[j][i]) { t=a[i][i]/a[j][i]; for(int k=i;k<n;k++) a[i][k]-=a[j][k]*t; for(int k=i;k<n;k++) { t=a[i][k]; a[i][k]=a[j][k]; a[j][k]=t; } temp=-temp; } temp=temp*a[i][i]; } if(temp<0) temp=-temp; return temp; } void init(){ memset(a,0,sizeof(a)); memset(g,0,sizeof(g)); } int n, m; int main(){ int T, u, v; rd(T); while(T--){ rd(n); rd(m); init(); while(m--){ rd(u); rd(v); add(u,v); } pt(DET(n)); putchar(' '); } return 0; }



  • 相关阅读:
    Codeforces 812E Sagheer and Apple Tree
    bzoj 4765: 普通计算姬
    bzoj 4552: [Tjoi2016&Heoi2016]排序
    bzoj 1096: [ZJOI2007]仓库建设
    bzoj 1030: [JSOI2007]文本生成器
    bzoj 1095: [ZJOI2007]Hide 捉迷藏
    JS实现HashMap
    A4纸表格打印
    JAVA字符串格式化-String.format()的使用
    证书打印CSS知识点总结
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7307841.html
Copyright © 2011-2022 走看看