Submission #65507815
Source Code Expand
#include<bits/stdc++.h>
#pragma GCC optimize("O3")
#pragma GCC optimize("unroll-loops")
using namespace std;
using ll=long long;
using ld=long double;
using ull=unsigned long long;
using i128 = __int128_t;
#define vs vector<string>
#define rep(i,n) for(int i=0;i<int(n);i++)
#define rep2(i,n) for(int i=n-1;i>=0;i--)
#define rep3(i,a,b) for(ll i=a;i<=ll(b);i++)
#define rep4(i,a,b) for(ll i=a;i>=ll(b);i--)
#define forv(i,V) for(const auto& i:V)
#define all(x) x.begin(),x.end()
#define fi first
#define se second
#define SIZE(x) int(x.size())
constexpr ll mod=998244353;
//constexpr ll mod=1000000007;
#define pi 3.14159265358979323
#define INF32 2147483647
#define INF64 9223372036854775807
#define faster ios::sync_with_stdio(false);std::cin.tie(nullptr)
#define pii pair<int, int>
#define pll pair<ll, ll>
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define rev reverse
#define vi vector<int>
#define vll vector<ll>
#define vpi vector<pair<int,int>>
#define vpll vector<pair<ll,ll>>
#define vvi vector<vector<int>>
#define vvll vector<vector<ll>>
#define prq priority_queue
#define lb lower_bound
#define ub upper_bound
#define popcnt __builtin_popcountll
#define TLE while(true);
#define RE assert(false);
#define MLE vector<vector<vector<long long>>> mle_mle(400,vector<vector<long long>>(1000,vector<long long>(1000)));
const string YESNO[2] = {"NO", "YES"};
const string YesNo[2] = {"No", "Yes"};
const string yesno[2] = {"no", "yes"};
#define rall(n) (n).rbegin(),(n).rend()
#define INT(...) int __VA_ARGS__;scan(__VA_ARGS__)
#define LL(...) ll __VA_ARGS__;scan(__VA_ARGS__)
#define STR(...) string __VA_ARGS__;scan(__VA_ARGS__)
#define CHR(...) char __VA_ARGS__;scan(__VA_ARGS__)
#define DBL(...) double __VA_ARGS__;scan(__VA_ARGS__)
#define LD(...) ld __VA_ARGS__;scan(__VA_ARGS__)
template<typename T,typename U>
ostream &operator<<(ostream&os,const pair<T,U>&p){os<<p.first<<" "<<p.second;return os;}
template<typename T,typename U>
istream &operator>>(istream&is,pair<T,U>&p){is>>p.first>>p.second;return is;}
template<typename T>
ostream &operator<<(ostream&os,const vector<T>&v){for(auto it=v.begin();it!=v.end();){os<<*it<<((++it)!=v.end()?" ":"");}return os;}
template<typename T>
istream &operator>>(istream&is,vector<T>&v){for(T &in:v){is>>in;}return is;}
void scan(){}
template<class Head,class... Tail>
void scan(Head&head,Tail&... tail){cin>>head;scan(tail...);}
template<class T>
void print(const T &t){cout<<t<<'\n';}
template<class Head, class... Tail>
void print(const Head &head, const Tail &... tail){cout<<head<<' ';print(tail...);}
template<class... T>
void fin(const T &... a){print(a...);exit(0);}
ll max(int a,ll b){return max((ll)a,b);}
ll max(ll a,int b){return max((ll)b,a);}
ll min(int a,ll b){return min((ll)a,b);}
ll min(ll a,int b){return min((ll)b,a);}
//a以上b以下の個数
template<typename T>
ll RangeOK(ll a,ll b,vector<T> &v){
return max(ub(all(v),b)-lb(all(v),a),0);
}
template <typename T>
vector<T> compress(vector<T> &X) {
vector<T> vals = X;
sort(vals.begin(), vals.end());
vals.erase(unique(vals.begin(), vals.end()), vals.end());
for (int i = 0; i < (int)X.size(); i++) {
X[i] = lower_bound(vals.begin(), vals.end(), X[i]) - vals.begin();
}
return vals;
}
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#include<atcoder/all>
using namespace atcoder;
using mint = modint998244353;
mint dfs(vvi &a, int cnt){
int n = a.size();
dsu d(n);
vi deg(n);
int degma = 0;
rep(i, n){
rep(j, n){
if(a[i][j]){
d.merge(i, j);
deg[i]++;
}
}
degma = max(degma, deg[i]);
}
mint ret = 1;
if(d.groups().size() == cnt + 1){
int u = count(all(deg), n - cnt);
if(u == 0) return mint(0);
rep3(i, 1, u) ret *= i;
dsu d2(n);
rep(i, n){
rep(j, n){
if(a[i][j] == 1 && deg[i] != n - cnt && deg[j] != n - cnt){
d2.merge(i, j);
}
}
}
auto f = d2.groups();
for(auto x:f){
if(x.size() == 1) continue;
vvi a2(n, vi(n));
rep(i, n){
if(d2.same(i, x[0])){
rep(j, n){
if(d2.same(j, x[0])) a2[i][j] = a[i][j];
}
}
}
ret *= dfs(a2, n - x.size());
}
}else{
auto f = d.groups();
for(auto x:f){
if(x.size() == 1) continue;
vvi a2(n, vi(n));
rep(i, n){
if(d.same(i, x[0])){
rep(j, n){
if(d.same(j, x[0])) a2[i][j] = a[i][j];
}
}
}
ret *= dfs(a2, n - x.size());
}
}
return ret;
}
void solve(){
INT(n);
vvi a(n, vi(n));
scan(a);
vvll g(n);
rep(i, n){
rep(j, n){
if(a[i][j]) g[i].pb(j);
}
}
vll deg(n);
rep(i, n) deg[i] = g[i].size();
if(deg[0] != n){
print(0);
return;
}
rep(i, n) a[i][0] = 0, a[0][i] = 0;
print(dfs(a, 1).val());
}
int main(){
INT(t);
while(t--) solve();
}
Submission Info
| Submission Time | |
|---|---|
| Task | D - Ancestor Relation |
| User | QgQ |
| Language | C++ 20 (gcc 12.2) |
| Score | 700 |
| Code Size | 5129 Byte |
| Status | AC |
| Exec Time | 155 ms |
| Memory | 137200 KiB |
Compile Error
Main.cpp: In function ‘mint dfs(std::vector<std::vector<int> >&, int)’:
Main.cpp:111:24: warning: comparison of integer expressions of different signedness: ‘std::vector<std::vector<int> >::size_type’ {aka ‘long unsigned int’} and ‘int’ [-Wsign-compare]
111 | if(d.groups().size() == cnt + 1){
| ~~~~~~~~~~~~~~~~~~^~~~~~~~~~
Judge Result
| Set Name | Sample | All | ||||
|---|---|---|---|---|---|---|
| Score / Max Score | 0 / 0 | 700 / 700 | ||||
| Status |
|
|
| Set Name | Test Cases |
|---|---|
| Sample | 01_sample_01.txt |
| All | 01_sample_01.txt, 02_small_01.txt, 02_small_02.txt, 02_small_03.txt, 03_mid_1_01.txt, 03_mid_1_02.txt, 03_mid_1_03.txt, 03_mid_1_04.txt, 03_mid_1_05.txt, 03_mid_1_06.txt, 03_mid_1_07.txt, 03_mid_1_08.txt, 03_mid_1_09.txt, 03_mid_1_10.txt, 03_mid_1_11.txt, 03_mid_1_12.txt, 03_mid_1_13.txt, 03_mid_1_14.txt, 03_mid_1_15.txt, 04_mid_2_01.txt, 04_mid_2_02.txt, 04_mid_2_03.txt, 04_mid_2_04.txt, 04_mid_2_05.txt, 04_mid_2_06.txt, 04_mid_2_07.txt, 04_mid_2_08.txt, 04_mid_2_09.txt, 04_mid_2_10.txt, 04_mid_2_11.txt, 04_mid_2_12.txt, 04_mid_2_13.txt, 04_mid_2_14.txt, 04_mid_2_15.txt, 05_mid_3_01.txt, 05_mid_3_02.txt, 05_mid_3_03.txt, 05_mid_3_04.txt, 05_mid_3_05.txt, 06_mid_4_01.txt, 06_mid_4_02.txt, 06_mid_4_03.txt, 06_mid_4_04.txt, 06_mid_4_05.txt, 07_mid_5_01.txt, 07_mid_5_02.txt, 07_mid_5_03.txt, 07_mid_5_04.txt, 07_mid_5_05.txt, 08_max_1_01.txt, 08_max_1_02.txt, 08_max_1_03.txt, 08_max_1_04.txt, 08_max_1_05.txt, 08_max_1_06.txt, 08_max_1_07.txt, 08_max_1_08.txt, 08_max_1_09.txt, 08_max_1_10.txt, 08_max_1_11.txt, 08_max_1_12.txt, 08_max_1_13.txt, 08_max_1_14.txt, 08_max_1_15.txt, 09_max_2_01.txt, 09_max_2_02.txt, 09_max_2_03.txt, 09_max_2_04.txt, 09_max_2_05.txt, 09_max_2_06.txt, 09_max_2_07.txt, 09_max_2_08.txt, 09_max_2_09.txt, 09_max_2_10.txt, 09_max_2_11.txt, 09_max_2_12.txt, 09_max_2_13.txt, 09_max_2_14.txt, 09_max_2_15.txt, 10_max_3_01.txt, 10_max_3_02.txt, 10_max_3_03.txt, 10_max_3_04.txt, 10_max_3_05.txt, 11_max_4_01.txt, 11_max_4_02.txt, 11_max_4_03.txt, 11_max_4_04.txt, 11_max_4_05.txt, 12_max_5_01.txt, 12_max_5_02.txt, 12_max_5_03.txt, 12_max_5_04.txt, 12_max_5_05.txt |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01_sample_01.txt | AC | 1 ms | 3584 KiB |
| 02_small_01.txt | AC | 19 ms | 3608 KiB |
| 02_small_02.txt | AC | 18 ms | 3560 KiB |
| 02_small_03.txt | AC | 19 ms | 3556 KiB |
| 03_mid_1_01.txt | AC | 25 ms | 4128 KiB |
| 03_mid_1_02.txt | AC | 25 ms | 3956 KiB |
| 03_mid_1_03.txt | AC | 26 ms | 3976 KiB |
| 03_mid_1_04.txt | AC | 26 ms | 4004 KiB |
| 03_mid_1_05.txt | AC | 25 ms | 4136 KiB |
| 03_mid_1_06.txt | AC | 26 ms | 3912 KiB |
| 03_mid_1_07.txt | AC | 26 ms | 3888 KiB |
| 03_mid_1_08.txt | AC | 25 ms | 4076 KiB |
| 03_mid_1_09.txt | AC | 26 ms | 3956 KiB |
| 03_mid_1_10.txt | AC | 26 ms | 3960 KiB |
| 03_mid_1_11.txt | AC | 25 ms | 3912 KiB |
| 03_mid_1_12.txt | AC | 26 ms | 3940 KiB |
| 03_mid_1_13.txt | AC | 25 ms | 3908 KiB |
| 03_mid_1_14.txt | AC | 26 ms | 3920 KiB |
| 03_mid_1_15.txt | AC | 26 ms | 4028 KiB |
| 04_mid_2_01.txt | AC | 20 ms | 3980 KiB |
| 04_mid_2_02.txt | AC | 20 ms | 3820 KiB |
| 04_mid_2_03.txt | AC | 20 ms | 3904 KiB |
| 04_mid_2_04.txt | AC | 19 ms | 3820 KiB |
| 04_mid_2_05.txt | AC | 20 ms | 3832 KiB |
| 04_mid_2_06.txt | AC | 19 ms | 3840 KiB |
| 04_mid_2_07.txt | AC | 20 ms | 3768 KiB |
| 04_mid_2_08.txt | AC | 20 ms | 3728 KiB |
| 04_mid_2_09.txt | AC | 20 ms | 3852 KiB |
| 04_mid_2_10.txt | AC | 20 ms | 3832 KiB |
| 04_mid_2_11.txt | AC | 20 ms | 4008 KiB |
| 04_mid_2_12.txt | AC | 20 ms | 3832 KiB |
| 04_mid_2_13.txt | AC | 19 ms | 3780 KiB |
| 04_mid_2_14.txt | AC | 20 ms | 3892 KiB |
| 04_mid_2_15.txt | AC | 20 ms | 3856 KiB |
| 05_mid_3_01.txt | AC | 17 ms | 3656 KiB |
| 05_mid_3_02.txt | AC | 17 ms | 3756 KiB |
| 05_mid_3_03.txt | AC | 17 ms | 3628 KiB |
| 05_mid_3_04.txt | AC | 17 ms | 3692 KiB |
| 05_mid_3_05.txt | AC | 17 ms | 3672 KiB |
| 06_mid_4_01.txt | AC | 34 ms | 4064 KiB |
| 06_mid_4_02.txt | AC | 34 ms | 4024 KiB |
| 06_mid_4_03.txt | AC | 34 ms | 4084 KiB |
| 06_mid_4_04.txt | AC | 34 ms | 4040 KiB |
| 06_mid_4_05.txt | AC | 34 ms | 4064 KiB |
| 07_mid_5_01.txt | AC | 21 ms | 3800 KiB |
| 07_mid_5_02.txt | AC | 21 ms | 3812 KiB |
| 07_mid_5_03.txt | AC | 21 ms | 3816 KiB |
| 07_mid_5_04.txt | AC | 22 ms | 3964 KiB |
| 07_mid_5_05.txt | AC | 22 ms | 3856 KiB |
| 08_max_1_01.txt | AC | 54 ms | 10016 KiB |
| 08_max_1_02.txt | AC | 97 ms | 64424 KiB |
| 08_max_1_03.txt | AC | 17 ms | 6952 KiB |
| 08_max_1_04.txt | AC | 50 ms | 10616 KiB |
| 08_max_1_05.txt | AC | 94 ms | 57692 KiB |
| 08_max_1_06.txt | AC | 16 ms | 5616 KiB |
| 08_max_1_07.txt | AC | 54 ms | 12624 KiB |
| 08_max_1_08.txt | AC | 16 ms | 5836 KiB |
| 08_max_1_09.txt | AC | 16 ms | 4924 KiB |
| 08_max_1_10.txt | AC | 53 ms | 11332 KiB |
| 08_max_1_11.txt | AC | 104 ms | 70500 KiB |
| 08_max_1_12.txt | AC | 16 ms | 4912 KiB |
| 08_max_1_13.txt | AC | 53 ms | 13288 KiB |
| 08_max_1_14.txt | AC | 102 ms | 69772 KiB |
| 08_max_1_15.txt | AC | 15 ms | 4928 KiB |
| 09_max_2_01.txt | AC | 20 ms | 7148 KiB |
| 09_max_2_02.txt | AC | 46 ms | 20020 KiB |
| 09_max_2_03.txt | AC | 16 ms | 4576 KiB |
| 09_max_2_04.txt | AC | 44 ms | 10672 KiB |
| 09_max_2_05.txt | AC | 39 ms | 16796 KiB |
| 09_max_2_06.txt | AC | 15 ms | 4944 KiB |
| 09_max_2_07.txt | AC | 26 ms | 7456 KiB |
| 09_max_2_08.txt | AC | 76 ms | 41732 KiB |
| 09_max_2_09.txt | AC | 16 ms | 4924 KiB |
| 09_max_2_10.txt | AC | 46 ms | 11132 KiB |
| 09_max_2_11.txt | AC | 38 ms | 15820 KiB |
| 09_max_2_12.txt | AC | 16 ms | 5128 KiB |
| 09_max_2_13.txt | AC | 21 ms | 7280 KiB |
| 09_max_2_14.txt | AC | 97 ms | 66084 KiB |
| 09_max_2_15.txt | AC | 16 ms | 4936 KiB |
| 10_max_3_01.txt | AC | 16 ms | 5032 KiB |
| 10_max_3_02.txt | AC | 16 ms | 5020 KiB |
| 10_max_3_03.txt | AC | 17 ms | 5040 KiB |
| 10_max_3_04.txt | AC | 17 ms | 5024 KiB |
| 10_max_3_05.txt | AC | 17 ms | 5236 KiB |
| 11_max_4_01.txt | AC | 155 ms | 137200 KiB |
| 11_max_4_02.txt | AC | 32 ms | 15740 KiB |
| 11_max_4_03.txt | AC | 98 ms | 69976 KiB |
| 11_max_4_04.txt | AC | 70 ms | 42980 KiB |
| 11_max_4_05.txt | AC | 23 ms | 9988 KiB |
| 12_max_5_01.txt | AC | 20 ms | 7268 KiB |
| 12_max_5_02.txt | AC | 18 ms | 5664 KiB |
| 12_max_5_03.txt | AC | 19 ms | 6340 KiB |
| 12_max_5_04.txt | AC | 17 ms | 5644 KiB |
| 12_max_5_05.txt | AC | 18 ms | 7076 KiB |