UVa 11174 - Stand in a Line
生活随笔
收集整理的這篇文章主要介紹了
UVa 11174 - Stand in a Line
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=2115
數學的特點在于不斷的推導,此題還需要用到
歐拉定理和逆元的相關性質,推薦博客(有部分小錯誤):http://www.cnblogs.com/vongang/archive/2013/06/04/3117370.html
代碼:
#include <iostream>
#include <cstdio>
#include <string>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <queue>#define ll long long
using namespace std;const ll MOD=1000000007;
const int N=100005;
ll power(ll x,ll y)
{ll tmp=1;while(y){if(y&1)tmp=tmp*x%MOD;x=x*x%MOD;y=y>>1;}return tmp;
}
int num[N],f[N],sum[N];
queue<int>qt;
int main()
{//freopen("data.in","r",stdin);int T;cin>>T;while(T--){int n,m;cin>>n>>m;memset(num,0,sizeof(num));memset(sum,0,sizeof(sum));memset(f,0,sizeof(f));while(!qt.empty()) qt.pop();while(m--){int a,b;cin>>a>>b;++num[b];f[a]=b;}for(int i=1;i<=n;++i)if(num[i]==0)qt.push(i);ll x=1,y=1;while(!qt.empty()){int i=qt.front();qt.pop();++sum[i];y=y*sum[i]%MOD;sum[f[i]]+=sum[i];if((--num[f[i]])==0)qt.push(f[i]);}for(int i=1;i<=n;++i)x=x*i%MOD;cout<<(x*power(y,MOD-2))%MOD<<endl;}return 0;
}
?
轉載于:https://www.cnblogs.com/liulangye/p/3175284.html
總結
以上是生活随笔為你收集整理的UVa 11174 - Stand in a Line的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 知音识曲下一句是什么啊?
- 下一篇: 京华同学聚会