結果
問題 | No.329 全射 |
ユーザー |
![]() |
提出日時 | 2015-12-22 13:13:40 |
言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 499 ms / 2,000 ms |
コード長 | 1,850 bytes |
コンパイル時間 | 1,571 ms |
コンパイル使用メモリ | 166,588 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-18 18:36:00 |
合計ジャッジ時間 | 6,795 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 40 |
ソースコード
#include <bits/stdc++.h>using namespace std;typedef long long ll;typedef vector<int> vi;typedef vector<ll> vl;typedef complex<double> P;typedef pair<int,int> pii;typedef pair<ll,ll> pll;#define REP(i,n) for(ll i=0;i<n;++i)#define REPR(i,n) for(ll i=1;i<n;++i)#define FOR(i,a,b) for(ll i=a;i<b;++i)#define DEBUG(x) cout<<#x<<": "<<x<<endl#define DEBUG_VEC(v) cout<<#v<<":";REP(i,v.size())cout<<" "<<v[i];cout<<endl#define ALL(a) (a).begin(),(a).end()#define MOD (ll)(1e9+7)#define ADD(a,b) a=((a)+(b))%MOD#define FIX(a) ((a)%MOD+MOD)%MOD// O(logMOD)ll inv(ll x){ll t = MOD-2;ll r = 1;while(t){if(t&1)r=r*x%MOD;x=x*x%MOD;t>>=1;}return r;}// O(logx)ll mypow(ll a,ll x){if(x==0)return 1;ll p = mypow(a,x/2);p = p*p%MOD;if(x&1) p = p*a%MOD;return p;}ll fact[1010];ll ifact[1010];ll comb(ll a,ll b){if(a-b<0)return 0;return fact[a]*ifact[a-b]%MOD*ifact[b]%MOD;}ll zmemo[1010][1010];// O(k)ll zensha(ll n,ll k){if(zmemo[n][k])return zmemo[n][k];ll ret = 0;REPR(i,k+1){ll tmp = 1;if((k-i)%2==1)tmp = MOD-1;tmp = tmp*comb(k,i)%MOD;tmp = tmp*mypow(i,n)%MOD;ret = (ret+tmp)%MOD;}return zmemo[n][k]=ret;}int main(){fact[0] = 1;REPR(i,1010) fact[i] = fact[i-1]*i%MOD;REP(i,1010) ifact[i] = inv(fact[i]);ll n,m;cin>>n>>m;vl w(n);REP(i,n) cin>>w[i];vector<vl> G(n,vl(n,0));REP(i,m){ll x,y;cin>>x>>y;--x;--y;if(x==y)continue;G[x][y] = min(w[x],w[y]);}REP(i,n)G[i][i] = w[i];// warshall floydREP(k,n)REP(i,n)REP(j,n){G[i][j] = max(G[i][j], min(G[i][k],G[k][j]));}ll result = 0;REP(src,n){REP(to,n){if(G[src][to]==w[to]){result += zensha(w[src],w[to]);result %= MOD;}}}cout << result << endl;return 0;}