Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define Roc ios_base::sync_with_stdio(false), cin.tie(NULL)
- using namespace std;
- int MOD=1000000007;
- long long a[51][51];
- void gcd(long long &x, long long &y, long long a, long long b)
- {
- if (!b)
- x = 1, y = 0;
- else
- {
- gcd(x, y, b, a % b);
- long long aux = x;
- x = y;
- y = aux - y * (a / b);
- }
- }
- long long inverse(long long x)
- {
- long long ins, inv = 0;
- gcd(inv, ins, x, MOD);
- if (inv <= 0)
- inv = MOD + inv % MOD;
- return inv;
- }
- long long determinant(long long a[][51],int n)
- {
- int i, j, k, poz;
- int semn=1;
- for(i=1;i<n;++i)
- {
- if(a[i][i]==0)
- {
- for(j=i+1,poz=0;j<=n && !poz;++j)
- if(a[j][i]!=0)
- {
- poz=j;
- break;
- }
- if(!poz)
- return 0;
- for(j=i;j<=n;++j)
- swap(a[i][j],a[poz][j]);
- semn*=-1;
- }
- long long p;
- for(j=i+1;j<=n;++j)
- {
- if(a[i][i]<0)
- a[i][i]+=MOD;
- p=(-a[j][i]*inverse(a[i][i]))%MOD;
- if(p<0)
- p+=MOD;
- for(k=i; k<=n; ++k)
- {
- a[j][k]=(a[j][k] + p*a[i][k])%MOD;
- if(a[j][k]<0)
- a[j][k]+=MOD;
- }
- }
- }
- long long pp=1;
- for(i=1;i<=n;++i)
- pp=( pp%MOD*a[i][i]%MOD)%MOD;
- return pp*semn;
- }
- int main()
- {
- int n,m;
- ifstream f("arbori_in_graf.in");
- f>>n>>m;
- int x,y;
- for(int i=1;i<=m;++i)
- f>>x>>y,a[x][y]=-1,a[y][x]=-1,++a[x][x],++a[y][y];
- f.close();
- long long det=determinant(a,n-1);
- ofstream g("arbori_in_graf.out");
- g<<(long long int)(det);
- g.close();
- return 0;
- }
Add Comment
Please, Sign In to add comment