結果
| 問題 |
No.2630 Colorful Vertices and Cheapest Paths
|
| コンテスト | |
| ユーザー |
沙耶花
|
| 提出日時 | 2024-02-16 21:57:16 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 278 ms / 2,500 ms |
| コード長 | 985 bytes |
| コンパイル時間 | 3,620 ms |
| コンパイル使用メモリ | 251,560 KB |
| 最終ジャッジ日時 | 2025-02-19 13:56:05 |
|
ジャッジサーバーID (参考情報) |
judge4 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 |
ソースコード
#include <stdio.h>
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace atcoder;
using mint = modint998244353;
using namespace std;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf32 1000000001
#define Inf64 1000000000000000001
int main(){
int n,m;
cin>>n>>m;
vector<int> a(m),b(m);
rep(i,m){
cin>>a[i]>>b[i];
a[i]--,b[i]--;
}
vector<int> c(n);
rep(i,n){
cin>>c[i];
c[i]--;
}
vector<long long> w(10);
rep(i,10)cin>>w[i];
int q;
cin>>q;
vector<long long> ans(q,Inf64);
vector<int> u(q),v(q);
rep(i,q){
cin>>u[i]>>v[i];
u[i]--,v[i]--;
}
rep(i,1<<10){
dsu D(n);
rep(j,m){
if((i>>c[a[j]])&1){
if((i>>c[b[j]])&1)D.merge(a[j],b[j]);
}
}
long long cost = 0;
rep(j,10){
if((i>>j)&1)cost += w[j];
}
rep(j,q){
if(D.same(u[j],v[j])&&((i>>c[u[j]])&1)&&((i>>c[v[j]])&1))ans[j] = min(ans[j],cost);
}
}
rep(i,q){
long long aa = ans[i];
if(aa==Inf64)aa = -1;
cout<<aa<<endl;
}
return 0;
}
沙耶花