提出 #53129264
ソースコード 拡げる
#include <bits/stdc++.h>
#define F first
#define S second
#define pb push_back
#define ppb pop_back
#define ep insert
#define endl '\n'
#define elif else if
#define pow pwr
#define sqrt sqrtt
#define int long long
typedef unsigned long long ull;
using namespace std;
const int N=20,M=66000;
int dp[M][N],n,m,c[N],con[N][N],comp[N],ans[N];
vector<pair<int,int>> adj[N];
vector<int> b,st;
bool vis[M][N];
set<int> valid[N];
void dfs(int x){
vis[0][x]=1;
st.pb(x);
for (auto u:adj[x]){
if (vis[0][u.F]) continue;
dfs(u.F);
}return;
}
void color(int x){
vis[0][x]=1;
for (auto u:adj[x]){
if (vis[0][u.F]) continue;
c[u.F]=c[x]+u.S;
color(u.F);
}return;
}
bool check(int x){
vis[0][x]=1;
bool ok=(c[x]>=0 && c[x]<n);
for (auto u:adj[x]){
ok&=(c[u.F]==c[x]+u.S);
if (vis[0][u.F]) continue;
ok&=check(u.F);
}return ok;
}
int rec(int mask,int i){
//cout<<mask<<' '<<i<<endl;
if (i>=b.size()) return 1;
if (vis[mask][i]) return dp[mask][i];
vis[mask][i]=1;
for (int j=0;j<n;j++){
if (con[b[i]][j]==-1) continue;
if (con[b[i]][j]&mask) continue;
bool x=rec(mask|con[b[i]][j],i+1);
if (x) valid[b[i]].ep(j);
dp[mask][i]|=x;
}return dp[mask][i];
}
int32_t main(){
ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
memset(con,-1,sizeof(con));
for (int i=0;i<N;i++) ans[i]=-2;
cin>>n>>m;
for (int i=1;i<=m;i++){
int x,y,z;
cin>>x>>y>>z;
adj[x].pb({y,-z});
adj[y].pb({x,z});
}
for (int i=1;i<=n;i++){
if (vis[0][i]) continue;
dfs(i);b.pb(i);
for (auto u:st) comp[u]=i;
st.clear();
}
for (auto u:b){
for (int i=0;i<n;i++){
c[u]=i;
for (int i=1;i<=n;i++) vis[0][i]=0;
color(u);
for (int i=1;i<=n;i++) vis[0][i]=0;
if (!check(u)) continue;
int mask=0;
for (int i=1;i<=n;i++){
if (comp[i]!=u) continue;
if (mask&(1<<c[i])){
mask=-1;
break;
}
mask+=(1<<c[i]);
}
con[u][i]=mask;
}
}
/*for (auto u:b){
for (int i=0;i<n;i++){
if (con[u][i]==-1) cout<<"-1 ";
else{
for (int j=0;j<n;j++) cout<<bool(con[u][i]&(1<<j));
cout<<' ';
}
}cout<<endl;
}*/
for (int i=1;i<=n;i++) vis[0][i]=0;
rec(0,0);
for (auto u:b){
if (valid[u].size()!=1) continue;
for (int i=1;i<=n;i++) vis[0][i]=0;
c[u]=*valid[u].begin();
color(u);
for (int i=1;i<=n;i++) if (comp[i]==u) ans[i]=c[i];
}
for (int i=1;i<=n;i++) cout<<ans[i]+1<<' ';
return 0;
}
提出情報
| 提出日時 | |
|---|---|
| 問題 | F - Estimate Order |
| ユーザ | Abito |
| 言語 | C++ 20 (gcc 12.2) |
| 得点 | 525 |
| コード長 | 2986 Byte |
| 結果 | AC |
| 実行時間 | 20 ms |
| メモリ | 15136 KiB |
コンパイルエラー
Main.cpp: In function ‘long long int rec(long long int, long long int)’:
Main.cpp:47:10: warning: comparison of integer expressions of different signedness: ‘long long int’ and ‘std::vector<long long int>::size_type’ {aka ‘long unsigned int’} [-Wsign-compare]
47 | if (i>=b.size()) return 1;
| ~^~~~~~~~~~
ジャッジ結果
| セット名 | Sample | All | ||||
|---|---|---|---|---|---|---|
| 得点 / 配点 | 0 / 0 | 525 / 525 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| Sample | sample00.txt, sample01.txt, sample02.txt |
| All | sample00.txt, sample01.txt, sample02.txt, testcase00.txt, testcase01.txt, testcase02.txt, testcase03.txt, testcase04.txt, testcase05.txt, testcase06.txt, testcase07.txt, testcase08.txt, testcase09.txt, testcase10.txt, testcase11.txt, testcase12.txt, testcase13.txt, testcase14.txt, testcase15.txt, testcase16.txt, testcase17.txt, testcase18.txt, testcase19.txt, testcase20.txt, testcase21.txt, testcase22.txt, testcase23.txt, testcase24.txt, testcase25.txt, testcase26.txt, testcase27.txt, testcase28.txt, testcase29.txt, testcase30.txt, testcase31.txt, testcase32.txt, testcase33.txt, testcase34.txt, testcase35.txt, testcase36.txt, testcase37.txt, testcase38.txt, testcase39.txt, testcase40.txt, testcase41.txt, testcase42.txt, testcase43.txt, testcase44.txt, testcase45.txt, testcase46.txt, testcase47.txt, testcase48.txt, testcase49.txt, testcase50.txt, testcase51.txt, testcase52.txt, testcase53.txt, testcase54.txt, testcase55.txt, testcase56.txt, testcase57.txt, testcase58.txt |
| ケース名 | 結果 | 実行時間 | メモリ |
|---|---|---|---|
| sample00.txt | AC | 1 ms | 3496 KiB |
| sample01.txt | AC | 1 ms | 3444 KiB |
| sample02.txt | AC | 1 ms | 3536 KiB |
| testcase00.txt | AC | 1 ms | 3432 KiB |
| testcase01.txt | AC | 1 ms | 3520 KiB |
| testcase02.txt | AC | 1 ms | 3496 KiB |
| testcase03.txt | AC | 1 ms | 3532 KiB |
| testcase04.txt | AC | 1 ms | 3508 KiB |
| testcase05.txt | AC | 1 ms | 3424 KiB |
| testcase06.txt | AC | 1 ms | 3568 KiB |
| testcase07.txt | AC | 1 ms | 3516 KiB |
| testcase08.txt | AC | 1 ms | 3472 KiB |
| testcase09.txt | AC | 1 ms | 3580 KiB |
| testcase10.txt | AC | 1 ms | 3604 KiB |
| testcase11.txt | AC | 1 ms | 3660 KiB |
| testcase12.txt | AC | 1 ms | 3688 KiB |
| testcase13.txt | AC | 1 ms | 3700 KiB |
| testcase14.txt | AC | 1 ms | 3888 KiB |
| testcase15.txt | AC | 2 ms | 5780 KiB |
| testcase16.txt | AC | 1 ms | 3732 KiB |
| testcase17.txt | AC | 2 ms | 4984 KiB |
| testcase18.txt | AC | 1 ms | 4060 KiB |
| testcase19.txt | AC | 3 ms | 7736 KiB |
| testcase20.txt | AC | 1 ms | 4168 KiB |
| testcase21.txt | AC | 2 ms | 6424 KiB |
| testcase22.txt | AC | 3 ms | 8032 KiB |
| testcase23.txt | AC | 1 ms | 4764 KiB |
| testcase24.txt | AC | 3 ms | 7376 KiB |
| testcase25.txt | AC | 4 ms | 8772 KiB |
| testcase26.txt | AC | 1 ms | 4176 KiB |
| testcase27.txt | AC | 8 ms | 13004 KiB |
| testcase28.txt | AC | 4 ms | 8940 KiB |
| testcase29.txt | AC | 5 ms | 12392 KiB |
| testcase30.txt | AC | 9 ms | 13608 KiB |
| testcase31.txt | AC | 6 ms | 11440 KiB |
| testcase32.txt | AC | 9 ms | 13472 KiB |
| testcase33.txt | AC | 10 ms | 14908 KiB |
| testcase34.txt | AC | 12 ms | 14516 KiB |
| testcase35.txt | AC | 9 ms | 14720 KiB |
| testcase36.txt | AC | 13 ms | 15064 KiB |
| testcase37.txt | AC | 14 ms | 15072 KiB |
| testcase38.txt | AC | 16 ms | 14904 KiB |
| testcase39.txt | AC | 9 ms | 13484 KiB |
| testcase40.txt | AC | 15 ms | 15012 KiB |
| testcase41.txt | AC | 13 ms | 14400 KiB |
| testcase42.txt | AC | 16 ms | 15016 KiB |
| testcase43.txt | AC | 19 ms | 15136 KiB |
| testcase44.txt | AC | 17 ms | 14936 KiB |
| testcase45.txt | AC | 20 ms | 15016 KiB |
| testcase46.txt | AC | 19 ms | 14952 KiB |
| testcase47.txt | AC | 20 ms | 14916 KiB |
| testcase48.txt | AC | 5 ms | 6376 KiB |
| testcase49.txt | AC | 3 ms | 4928 KiB |
| testcase50.txt | AC | 10 ms | 9252 KiB |
| testcase51.txt | AC | 1 ms | 3396 KiB |
| testcase52.txt | AC | 1 ms | 3552 KiB |
| testcase53.txt | AC | 1 ms | 3892 KiB |
| testcase54.txt | AC | 1 ms | 3416 KiB |
| testcase55.txt | AC | 1 ms | 3420 KiB |
| testcase56.txt | AC | 1 ms | 3456 KiB |
| testcase57.txt | AC | 1 ms | 3520 KiB |
| testcase58.txt | AC | 1 ms | 3416 KiB |