diff --git a/src/7/21/T636331.cpp b/src/7/21/T636331.cpp index 3dcc2b7..b656614 100644 --- a/src/7/21/T636331.cpp +++ b/src/7/21/T636331.cpp @@ -1,75 +1,13 @@ -#include -#include #include -#include -#include -#include +#include -using ll = int64_t; - -ll T,n; -std::vector> ta,tb; -ll ans=std::numeric_limits::max(); - -template -void log(Ts&&...ts){ - // std::cout<<"Log: "; - // ((std::cout<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); - } - } +static inline __attribute__((always_inline)) int max(int a,int b){ + if(a>b)return a; + else return b; } int main(){ - std::cin>>T; - while(T--){ - ans=std::numeric_limits::max(); - std::cin>>n; - ta.resize(n+1,std::vector()); - tb.resize(n+1,std::vector()); - for(ll i=1;i>u>>v; - ta[u].push_back(v); - ta[v].push_back(u); - } - for(ll i=1;i>u>>v; - tb[u].push_back(v); - tb[v].push_back(u); - } - ll sa{},sb{}; - std::cin>>sa>>sb; - // std::set visa,visb; - // visa.insert(sa); - // visb.insert(sb); - bfs(sa,sb,0, 0); - std::cout<>a>>b; + std::cout< +#include +#include +#include +#include +#include +#include +#include + +using ll = int64_t; + +ll n,m; +std::vector k,a; +std::vector> t; + +template +void log(Ts&&...ts){ + // std::cout<<"Log: "; + // ((std::cout< 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