QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#259786 | #7794. 水果茶 | hos_lyric# | 10 | 85ms | 4240kb | C++14 | 5.3kb | 2023-11-21 13:45:35 | 2024-07-04 03:08:01 |
Judging History
answer
#include <cassert>
#include <cmath>
#include <cstdint>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <bitset>
#include <complex>
#include <deque>
#include <functional>
#include <iostream>
#include <limits>
#include <map>
#include <numeric>
#include <queue>
#include <random>
#include <set>
#include <sstream>
#include <string>
#include <unordered_map>
#include <unordered_set>
#include <utility>
#include <vector>
using namespace std;
using Int = long long;
template <class T1, class T2> ostream &operator<<(ostream &os, const pair<T1, T2> &a) { return os << "(" << a.first << ", " << a.second << ")"; };
template <class T> ostream &operator<<(ostream &os, const vector<T> &as) { const int sz = as.size(); os << "["; for (int i = 0; i < sz; ++i) { if (i >= 256) { os << ", ..."; break; } if (i > 0) { os << ", "; } os << as[i]; } return os << "]"; }
template <class T> void pv(T a, T b) { for (T i = a; i != b; ++i) cerr << *i << " "; cerr << endl; }
template <class T> bool chmin(T &t, const T &f) { if (t > f) { t = f; return true; } return false; }
template <class T> bool chmax(T &t, const T &f) { if (t < f) { t = f; return true; } return false; }
#define COLOR(s) ("\x1b[" s "m")
////////////////////////////////////////////////////////////////////////////////
template <unsigned M_> struct ModInt {
static constexpr unsigned M = M_;
unsigned x;
constexpr ModInt() : x(0U) {}
constexpr ModInt(unsigned x_) : x(x_ % M) {}
constexpr ModInt(unsigned long long x_) : x(x_ % M) {}
constexpr ModInt(int x_) : x(((x_ %= static_cast<int>(M)) < 0) ? (x_ + static_cast<int>(M)) : x_) {}
constexpr ModInt(long long x_) : x(((x_ %= static_cast<long long>(M)) < 0) ? (x_ + static_cast<long long>(M)) : x_) {}
ModInt &operator+=(const ModInt &a) { x = ((x += a.x) >= M) ? (x - M) : x; return *this; }
ModInt &operator-=(const ModInt &a) { x = ((x -= a.x) >= M) ? (x + M) : x; return *this; }
ModInt &operator*=(const ModInt &a) { x = (static_cast<unsigned long long>(x) * a.x) % M; return *this; }
ModInt &operator/=(const ModInt &a) { return (*this *= a.inv()); }
ModInt pow(long long e) const {
if (e < 0) return inv().pow(-e);
ModInt a = *this, b = 1U; for (; e; e >>= 1) { if (e & 1) b *= a; a *= a; } return b;
}
ModInt inv() const {
unsigned a = M, b = x; int y = 0, z = 1;
for (; b; ) { const unsigned q = a / b; const unsigned c = a - q * b; a = b; b = c; const int w = y - static_cast<int>(q) * z; y = z; z = w; }
assert(a == 1U); return ModInt(y);
}
ModInt operator+() const { return *this; }
ModInt operator-() const { ModInt a; a.x = x ? (M - x) : 0U; return a; }
ModInt operator+(const ModInt &a) const { return (ModInt(*this) += a); }
ModInt operator-(const ModInt &a) const { return (ModInt(*this) -= a); }
ModInt operator*(const ModInt &a) const { return (ModInt(*this) *= a); }
ModInt operator/(const ModInt &a) const { return (ModInt(*this) /= a); }
template <class T> friend ModInt operator+(T a, const ModInt &b) { return (ModInt(a) += b); }
template <class T> friend ModInt operator-(T a, const ModInt &b) { return (ModInt(a) -= b); }
template <class T> friend ModInt operator*(T a, const ModInt &b) { return (ModInt(a) *= b); }
template <class T> friend ModInt operator/(T a, const ModInt &b) { return (ModInt(a) /= b); }
explicit operator bool() const { return x; }
bool operator==(const ModInt &a) const { return (x == a.x); }
bool operator!=(const ModInt &a) const { return (x != a.x); }
friend std::ostream &operator<<(std::ostream &os, const ModInt &a) { return os << a.x; }
};
////////////////////////////////////////////////////////////////////////////////
constexpr unsigned MO = 1315105;
using Mint = ModInt<MO>;
namespace io {
char ch,B0[1<<15],*S=B0,*T=B0;
#define getc() (S==T&&(T=(S=B0)+fread(B0,1,1<<15,stdin),S==T)?0:*S++)
inline int read(){
int aa;
while(ch=getc(),ch<'0'||ch>'9');aa=ch-'0';
while(ch=getc(),ch>='0'&&ch<='9')aa=aa*10+ch-'0';
return aa;
}
} // io
int N, M, K;
vector<int> A, B;
vector<Mint> C;
vector<vector<int>> graph;
namespace brute {
Mint run() {
cerr<<"[brute::run]"<<endl;
Mint ans = 0;
for (int s = 0; s < N; ++s) {
queue<int> que;
vector<int> dist(N, -1);
dist[s] = 0;
que.push(s);
for (; que.size(); ) {
const int u = que.front();
que.pop();
for (const int v : graph[u]) {
if (!~dist[v]) {
dist[v] = dist[u] + 1;
que.push(v);
}
}
}
Mint sum = 0;
for (int u = s + 1; u < N; ++u) if (dist[u] == K) {
sum += C[u];
}
ans += C[s] * sum;
}
return ans;
}
} // brute
int main() {
N = io::read();
M = io::read();
K = io::read();
A.resize(M);
B.resize(M);
for (int i = 0; i < M; ++i) {
A[i] = io::read() - 1;
B[i] = io::read() - 1;
}
C.resize(N);
{
const int seed = io::read();
mt19937_64 rnd(seed);
// int MAXM=1e9;
const int MAXM=1e9;
// for(int i=1;i<=n;i++)a[i]=rnd()%MAXM+1;
for(int i=1;i<=N;i++)C[i-1]=(Int)(rnd()%MAXM+1);
}
// cerr<<"C = "<<C<<endl;
graph.assign(N, {});
for (int i = 0; i < M; ++i) {
graph[A[i]].push_back(B[i]);
graph[B[i]].push_back(A[i]);
}
Mint ans = brute::run();
printf("%u\n", ans.x);
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Subtask #1:
score: 10
Accepted
Test #1:
score: 10
Accepted
time: 80ms
memory: 3980kb
input:
3000 3408 93 1 2 2 3 3 4 4 5 1 6 3 7 6 8 7 9 6 10 6 11 11 12 12 13 9 14 12 15 13 16 15 17 15 18 18 19 15 20 18 21 20 22 18 23 22 24 23 25 23 26 26 27 27 28 27 29 29 30 26 31 27 32 29 33 32 34 30 35 32 36 36 37 37 38 35 39 39 40 37 41 37 42 41 43 39 44 41 45 45 46 45 47 46 48 48 49 47 50 47 51 51 52 ...
output:
929234
result:
ok 1 number(s): "929234"
Test #2:
score: 0
Accepted
time: 85ms
memory: 3980kb
input:
3000 3404 8 1 2 1 3 1 4 4 5 4 6 2 7 4 8 5 9 8 10 10 11 9 12 12 13 9 14 11 15 13 16 15 17 16 18 15 19 17 20 18 21 21 22 19 23 21 24 24 25 24 26 25 27 26 28 27 29 27 30 26 31 31 32 28 33 30 34 30 35 32 36 35 37 34 38 34 39 36 40 39 41 39 42 42 43 39 44 44 45 44 46 42 47 45 48 47 49 46 50 46 51 51 52 4...
output:
700402
result:
ok 1 number(s): "700402"
Test #3:
score: 0
Accepted
time: 78ms
memory: 4240kb
input:
2928 3260 15 1 2 1 3 1 4 4 5 2 6 1 7 1 8 2 9 9 10 6 11 8 12 3 13 6 14 11 15 3 16 1 17 16 18 7 19 6 20 1 21 3 22 18 23 4 24 11 25 19 26 21 27 15 28 1 29 18 30 25 31 27 32 18 33 29 34 33 35 16 36 13 37 19 38 13 39 18 40 18 41 34 42 28 43 42 44 4 45 22 46 28 47 36 48 46 49 12 50 39 51 15 52 5 53 45 54 ...
output:
563777
result:
ok 1 number(s): "563777"
Test #4:
score: 0
Accepted
time: 75ms
memory: 4016kb
input:
2935 3257 17 1 2 1 3 2 4 4 5 5 6 4 7 7 8 8 9 7 10 10 11 4 12 1 13 4 14 1 15 3 16 7 17 14 18 10 19 15 20 20 21 7 22 4 23 14 24 7 25 22 26 22 27 4 28 11 29 13 30 11 31 23 32 32 33 22 34 31 35 10 36 11 37 25 38 8 39 30 40 6 41 1 42 4 43 18 44 28 45 11 46 11 47 14 48 42 49 36 50 28 51 15 52 16 53 18 54 ...
output:
1076031
result:
ok 1 number(s): "1076031"
Test #5:
score: 0
Accepted
time: 67ms
memory: 4224kb
input:
2789 3104 17 1 2 2 3 3 4 4 5 4 6 3 7 2 8 6 9 2 10 6 11 8 12 3 13 5 14 11 15 4 16 12 17 13 18 15 19 6 20 9 21 17 22 20 23 23 24 20 25 17 26 13 27 11 28 2 29 16 30 12 31 21 32 16 33 33 34 14 35 22 36 12 37 37 38 31 39 32 40 12 41 4 42 42 43 18 44 29 45 23 46 19 47 35 48 47 49 34 50 17 51 29 52 13 53 4...
output:
1030647
result:
ok 1 number(s): "1030647"
Test #6:
score: 0
Accepted
time: 63ms
memory: 3956kb
input:
2773 3068 5 1 2 1 3 1 4 3 5 5 6 1 7 6 8 3 9 3 10 10 11 9 12 5 13 9 14 4 15 9 16 11 17 1 18 11 19 17 20 17 21 16 22 4 23 23 24 22 25 12 26 18 27 17 28 21 29 16 30 3 31 29 32 9 33 6 34 9 35 28 36 3 37 31 38 18 39 10 40 23 41 15 42 4 43 12 44 41 45 11 46 3 47 11 48 19 49 25 50 11 51 2 52 24 53 42 54 17...
output:
1019285
result:
ok 1 number(s): "1019285"
Test #7:
score: 0
Accepted
time: 68ms
memory: 3964kb
input:
2756 3058 17 1 2 2 3 3 4 3 5 1 6 6 7 1 8 3 9 2 10 2 11 11 12 12 13 13 14 14 15 5 16 16 17 5 18 10 19 14 20 18 21 17 22 22 23 9 24 7 25 11 26 19 27 12 28 1 29 6 30 4 31 25 32 5 33 23 34 1 35 11 36 1 37 35 38 34 39 32 40 12 41 20 42 12 43 31 44 1 45 34 46 20 47 3 48 44 49 27 50 2 51 35 52 34 53 53 54 ...
output:
664550
result:
ok 1 number(s): "664550"
Subtask #2:
score: 0
Time Limit Exceeded
Test #8:
score: 0
Time Limit Exceeded
input:
99734 99733 32 1 2 1 3 2 4 3 5 4 6 5 7 5 8 5 9 4 10 8 11 10 12 2 13 5 14 14 15 11 16 11 17 1 18 5 19 9 20 16 21 20 22 1 23 23 24 5 25 24 26 25 27 1 28 3 29 15 30 14 31 24 32 3 33 29 34 31 35 11 36 9 37 30 38 4 39 26 40 3 41 25 42 36 43 34 44 43 45 13 46 42 47 5 48 48 49 14 50 30 51 2 52 47 53 53 54 ...
output:
result:
Subtask #3:
score: 0
Time Limit Exceeded
Test #13:
score: 0
Time Limit Exceeded
input:
100000 100000 229 1 2 2 3 1 4 2 5 1 6 4 7 3 8 3 9 7 10 6 11 2 12 10 13 12 14 5 15 7 16 9 17 16 18 13 19 13 20 15 21 14 22 14 23 16 24 22 25 16 26 17 27 22 28 27 29 28 30 30 31 24 32 29 33 30 34 26 35 32 36 32 37 30 38 37 39 35 40 31 41 32 42 38 43 36 44 35 45 40 46 40 47 42 48 47 49 46 50 48 51 46 5...
output:
result:
Subtask #4:
score: 0
Time Limit Exceeded
Test #14:
score: 0
Time Limit Exceeded
input:
89874 89894 91 1 2 2 3 2 4 1 5 4 6 1 7 5 8 8 9 6 10 7 11 10 12 1 13 10 14 3 15 13 16 11 17 15 18 4 19 7 20 13 21 3 22 15 23 14 24 16 25 14 26 22 27 7 28 1 29 10 30 26 31 28 32 5 33 7 34 15 35 20 36 34 37 16 38 18 39 24 40 13 41 17 42 26 43 18 44 21 45 42 46 41 47 3 48 46 49 34 50 17 51 22 52 10 53 3...
output:
result:
Subtask #5:
score: 0
Time Limit Exceeded
Test #15:
score: 0
Time Limit Exceeded
input:
90000 93021 19 1 2 1 3 3 4 1 5 3 6 5 7 5 8 5 9 4 10 5 11 3 12 7 13 10 14 5 15 6 16 9 17 8 18 16 19 17 20 12 21 20 22 22 23 15 24 22 25 22 26 19 27 26 28 27 29 22 30 29 31 23 32 28 33 32 34 26 35 29 36 36 37 28 38 36 39 36 40 34 41 33 42 35 43 41 44 36 45 40 46 43 47 46 48 39 49 44 50 47 51 46 52 52 ...
output:
result:
Subtask #6:
score: 0
Time Limit Exceeded
Test #16:
score: 0
Time Limit Exceeded
input:
89849 95377 39 1 2 2 3 2 4 2 5 4 6 6 7 7 8 4 9 5 10 6 11 2 12 2 13 12 14 1 15 1 16 8 17 12 18 10 19 5 20 9 21 1 22 7 23 23 24 23 25 16 26 26 27 26 28 8 29 25 30 16 31 22 32 14 33 6 34 16 35 11 36 12 37 14 38 13 39 5 40 26 41 1 42 32 43 38 44 31 45 16 46 5 47 29 48 45 49 22 50 50 51 48 52 20 53 33 54...
output:
result:
Subtask #7:
score: 0
Time Limit Exceeded
Test #17:
score: 0
Time Limit Exceeded
input:
3000002 4500001 2 2 3 2 1 3 1 4 5 4 1 5 1 6 7 6 1 7 1 8 9 8 1 9 1 10 11 10 1 11 1 12 13 12 1 13 1 14 15 14 1 15 1 16 17 16 1 17 1 18 19 18 1 19 1 20 21 20 1 21 1 22 23 22 1 23 1 24 25 24 1 25 1 26 27 26 1 27 1 28 29 28 1 29 1 30 31 30 1 31 1 32 33 32 1 33 1 34 35 34 1 35 1 36 37 36 1 37 1 38 39 38 1...