SP104 HIGH - Highways

题面

Matrix Tree 定理 模板,行列式的值用高斯消元

代码

#include<bits/stdc++.h>
#define LL long long
#define int LL

using namespace std;
const int MAXN = 1005;
const double eps = 1e-7;

inline int rd(){
    int x=0,f=1;char ch=getchar();
    while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
    while(isdigit(ch))  {x=(x<<1)+(x<<3)+ch-48;ch=getchar();}
    return x*f;
}

int n,m,T,is[MAXN];
int du[MAXN][MAXN];
int a[MAXN][MAXN];
double ans[MAXN][MAXN];
LL ANS=1;

inline void gauss(int n){
    double ret=1;
    int h=1,l=1;
    for(;h<=n && l<=n;h++,l++){
        int r=h;
        for(register int i=h+1;i<=n;i++)
            if(fabs(ans[i][l])>fabs(ans[r][l])) r=i;
        if(fabs(ans[r][l])<eps) {h--;continue;}
        if(r!=h){
            for(register int i=l;i<=n;i++)
                swap(ans[h][i],ans[r][i]);
            ret=-ret;
        }
        for(register int i=h+1;i<=n;i++)
        if(fabs(ans[i][l])>eps){    
            double tmp=ans[i][l]/ans[h][l];
            for(register int j=l+1;j<=n;j++)
                ans[i][j]-=tmp*ans[h][j];
            ans[i][l]=0;
        }
    }
//  for(register int i=1;i<=n;i++){
//      for(register int j=1;j<=n;j++)
//          cout<<ans[i][j]<<" ";
//      cout<<endl;
//  }
    for(register int i=1;i<=n;i++)
        ret*=ans[i][i];
    printf("%lld\n",(LL)(fabs(ret)));
}

signed main(){
    T=rd();
    while(T--){
        n=rd();m=rd();
        ANS=1;
        for(register int i=1;i<=n;i++)
            for(register int j=1;j<=n;j++)
                ans[i][j]=du[i][j]=a[i][j]=0;
        for(register int i=1;i<=m;i++){
            int x,y;
            x=rd();y=rd();
            a[x][y]++;a[y][x]++;
            du[x][x]++;du[y][y]++;
        }
        for(register int i=1;i<=n;i++)
            for(register int j=1;j<=n;j++)
                ans[i][j]=du[i][j]-a[i][j];
//          for(register int i=1;i<=n;i++){
//              for(register int j=1;j<=n;j++)
//                  cout<<ans[i][j]<<" ";
//              cout<<endl;
//          }
        gauss(n-1);
    }
    return 0;
}
posted @ 2018-07-02 10:17  Monster_Qi  阅读(93)  评论(0编辑  收藏  举报