結果
問題 | No.329 全射 |
ユーザー |
![]() |
提出日時 | 2015-12-22 20:10:08 |
言語 | C++11 (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 24 ms / 2,000 ms |
コード長 | 990 bytes |
コンパイル時間 | 1,487 ms |
コンパイル使用メモリ | 159,224 KB |
実行使用メモリ | 11,704 KB |
最終ジャッジ日時 | 2024-09-18 18:44:12 |
合計ジャッジ時間 | 2,559 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 40 |
ソースコード
#include <bits/stdc++.h> using namespace std; typedef long long LL; int z[300]; int w[300]; int d[300][300]; const LL MOD=1e9+7; LL dp[1001][1001]; inline void zensha(){ fill((LL*)dp,(LL*)dp+1001*1001,0); for(int n=1;n<1001;n++){ dp[n][1]=1; for(int m=2;m<=n;m++) dp[n][m]=m*(dp[n-1][m]+dp[n-1][m-1])%MOD; } } int main() { fill((int*)d,(int*)d+300*300,0); zensha(); int N,M; cin>>N>>M; for(int i=0;i<N;i++){ cin>>w[i]; d[i][i]=w[i]; } for(int i=0;i<M;i++){ int from,to; cin>>from>>to; d[from-1][to-1]=min(w[from-1],w[to-1]); } for(int k = 0; k < N; k++) for(int i = 0; i < N; i++) for(int j = 0; j < N; j++) d[i][j]=max(d[i][j],min(d[i][k],d[k][j])); LL res=0; for(int i = 0; i < N; i++)for(int j = 0; j < N; j++){ if(d[i][j]==w[j]){ res+=dp[w[i]][d[i][j]]; res%=MOD; } } cout<<res<<endl; return 0; }