This commit is contained in:
Zengtudor 2025-07-22 10:33:52 +08:00
parent 401024ab86
commit 8a8a51cd69
2 changed files with 72 additions and 69 deletions

View File

@ -1,75 +1,13 @@
#include <algorithm>
#include <cstdint>
#include <iostream> #include <iostream>
#include <limits> #include <utility>
#include <set>
#include <vector>
using ll = int64_t; static inline __attribute__((always_inline)) int max(int a,int b){
if(a>b)return a;
ll T,n; else return b;
std::vector<std::vector<ll>> ta,tb;
ll ans=std::numeric_limits<ll>::max();
template<class ...Ts>
void log(Ts&&...ts){
// std::cout<<"Log: ";
// ((std::cout<<ts<<' '),...);
// std::cout<<'\n';
}
void bfs(ll na,ll nb,ll nans,ll d){
if(d>n)return;
nans = std::max(na+nb,nans);
// log("na:",na,"nb:",nb,"nans:",nans,"ans:",ans);
if(na==1&&nb==1){
log("na:",na,"nb:",nb,"nans:",nans,"ans:",ans);
ans=std::min(ans,nans);
// log("nans:",nans);
return;
}
for(auto nxta:ta[na]){
for(auto nxtb:tb[nb]){
bfs(nxta,nxtb,nans,d+1);
}
}
if(nb!=1){
for(auto nxta:ta[na]){
bfs(nxta,nb,nans,d+1);
}
}
if(na!=1){
for(auto nxtb:tb[nb]){
bfs(na,nxtb,nans,d+1);
}
}
} }
int main(){ int main(){
std::cin>>T; int a,b;
while(T--){ std::cin>>a>>b;
ans=std::numeric_limits<ll>::max(); std::cout<<max(a,b)<<'\n';
std::cin>>n;
ta.resize(n+1,std::vector<ll>());
tb.resize(n+1,std::vector<ll>());
for(ll i=1;i<n;i++){
ll u,v;
std::cin>>u>>v;
ta[u].push_back(v);
ta[v].push_back(u);
}
for(ll i=1;i<n;i++){
ll u,v;
std::cin>>u>>v;
tb[u].push_back(v);
tb[v].push_back(u);
}
ll sa{},sb{};
std::cin>>sa>>sb;
// std::set<ll> visa,visb;
// visa.insert(sa);
// visb.insert(sb);
bfs(sa,sb,0, 0);
std::cout<<ans<<'\n';
}
} }

65
src/7/22/P6567.cpp Normal file
View File

@ -0,0 +1,65 @@
#include <algorithm>
#include <cstdint>
#include <iostream>
#include <istream>
#include <set>
#include <tuple>
#include <utility>
#include <vector>
using ll = int64_t;
ll n,m;
std::vector<ll> k,a;
std::vector<std::pair<ll, ll>> t;
template<class ...Ts>
void log(Ts&&...ts){
// std::cout<<"Log: ";
// ((std::cout<<ts<<' '),...);
// std::cout<<'\n';
}
namespace c1{
std::set<ll> s;
ll max{};
void static inline dfs(ll d,ll nsum){
if(nsum>max)return;
if(d>n){
s.insert(nsum);
log("nsum:",nsum);
return;
}
for(ll i=0;i<=a[d];i++){
dfs(d+1,nsum+k[d]*i);
}
}
}
int main(){
std::iostream::sync_with_stdio(false);
std::cin.tie(nullptr);
std::cout.tie(nullptr);
std::cin>>n>>m;
k.resize(n+1);
a.resize(n+1);
t.resize(m+1);
for(ll i=1;i<=n;i++){
std::cin>>k[i]>>a[i];
}
for(ll i=1;i<=m;i++){
std::cin>>t[i].first;
t[i].second=i;
c1::max=std::max(c1::max,t[i].first);
}
using namespace c1;
dfs(1, 0);
for(ll i=1;i<t.size();i++){
if(auto it = s.find(t[i].first);it!=s.end()){
std::cout<<"Yes\n";
}else{
std::cout<<"No\n";
}
}
}