fork download
  1. #include<bits/stdc++.h>
  2.  
  3. const int N = 2e5 + 10;
  4. const int V = 1e6 + 10;
  5. const long long M = 1e9 + 7;
  6. const long long INF = 1e18;
  7.  
  8. long long a[N + 1],n,m;
  9. long long fact[N + 1];
  10. std::vector<int> adj[N + 1];
  11.  
  12. void readData(){
  13. std::cin >> n >> m;
  14. fact[0] = 1;
  15. for(int i = 1;i <= n;++i){
  16. std::cin >> a[i];
  17. fact[i] = (fact[i - 1] * i) % M;
  18. }
  19. for(int i = 1;i <= m;++i){
  20. int u,v;
  21. std::cin >> u >> v;
  22. adj[u].emplace_back(v);
  23. adj[v].emplace_back(u);
  24. }
  25. }
  26. long long f(long long t){
  27. return t * (t - 1) / 2;
  28. }
  29. long long solve(){
  30. long long ans = 0;
  31. for(int i = 1;i <= n;++i){
  32. long long t = adj[i].size();
  33. ans = (ans + (t * f(n) % M) * a[i] % M * fact[n - 2]) % M;
  34. }
  35. return ans;
  36. }
  37. long long brute(){
  38. long long ans = 0;
  39. std::vector<int> idx(n + 1,0);
  40. for(int i = 1;i <= n;++i){
  41. idx[i] = i;
  42. }
  43. do{
  44. std::vector<bool> vis(n + 1,0);
  45. for(int i = 1;i <= n;++i){
  46. int it = idx[i];
  47. vis[it] = true;
  48. for(int u : adj[it]){
  49. if(!vis[u]){
  50. ans += a[u];
  51. }
  52. ans %= M;
  53. }
  54. }
  55. }while(std::next_permutation(idx.begin() + 1,idx.end()));
  56. return ans;
  57. }
  58. int main(){
  59. std::ios_base::sync_with_stdio(false);
  60. std::cin.tie(nullptr);
  61. freopen("order.inp","r",stdin);
  62. freopen("order.ans","w",stdout);
  63. readData();
  64. std::cout << solve();
  65. return 0;
  66. }
  67.  
Success #stdin #stdout 0.01s 10140KB
stdin
Standard input is empty
stdout
Standard output is empty