Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //misaka will carry me to master
- #include <iostream>
- #include <cstdio>
- #include <cstring>
- #include <cmath>
- #include <utility>
- #include <cassert>
- #include <algorithm>
- #include <vector>
- #include <functional>
- #include <numeric>
- #include <set>
- #include <map>
- #define ll long long
- #define lb long double
- #define sz(vec) ((int)(vec.size()))
- #define all(x) x.begin(), x.end()
- #define pb push_back
- #define mp make_pair
- const lb eps = 1e-9;
- const ll mod = 1e9 + 7, ll_max = 1e18;
- //const ll mod = (1 << (23)) * 119 +1;
- const int MX = 50, int_max = 0x3f3f3f3f;
- const int NN = 19;
- using namespace std;
- int dp[MX][(1 << NN) +10]; //ive reached node i with colors mask
- vector<int> radj[MX];
- int n, m;
- int w[MX], c[MX], ans[MX];
- int occ[MX];
- vector<int> srt;
- void slow(){
- int k = sz(srt);
- radj[1].pb(0);
- for(int u = 1; u<=n; u++){
- if(occ[c[u]] > 1){
- int comp = (lower_bound(all(srt), c[u]) - srt.begin());
- int cu = 1 << comp;
- for(int v : radj[u]){
- for(int i = 0; i<(1 << k); i++){
- if(cu&i){
- dp[u][i] = max(dp[u][i], dp[v][i]);
- ans[u] = max(ans[u], dp[u][i]);
- }else{
- dp[u][i|cu] = max(dp[u][i|cu], dp[v][i] + w[srt[comp]]);
- ans[u] = max(ans[u], dp[u][i&cu]);
- }
- }
- }
- }else{
- for(int v : radj[u]){
- for(int i = 0; i<(1 << k); i++){
- dp[u][i] = max(dp[u][i], dp[v][i] + w[c[u]]);
- ans[u] = max(ans[u], dp[u][i]);
- }
- }
- }
- }
- }
- void solve(){
- scanf("%d%d", &n, &m);
- for(int i = 1; i<=n; i++) scanf("%d", c+i);
- for(int i = 1; i<=n; i++) scanf("%d", w+i);
- for(int i = 0; i<m; i++){
- int a, b;
- scanf("%d%d", &a, &b);
- radj[b].pb(a);
- }
- for(int i = 1; i<=n; i++){
- occ[c[i]]++;
- }
- for(int i = 1; i<=n; i++){
- if(occ[i] > 1) srt.pb(i);
- }
- sort(all(srt));
- slow();
- for(int i = 1; i<=n; i++){
- printf("%d\n", ans[i]);
- }
- }
- int main(){
- cin.tie(0) -> sync_with_stdio(0);
- int T = 1;
- //cin >> T;
- while(T--){
- solve();
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement