Diary_3.7

1. King Bombee

#define int long long
const int maxn = 2e3+10;
int n, m, k, s, t, x, p = 998244353;
vector<vector<int>> tree;
int dp[maxn][maxn][2];
void solve(){
    cin >> n >> m >> k >> s >> t >> x;
    vector<vector<int>> ctree(n+1, vector<int>());
    swap(ctree, tree);
    for(int i, u, v; i<m; i++){
        cin >> u >> v;
        tree[u].push_back(v);
        tree[v].push_back(u);
    }
    dp[0][s][0] = 1;
    for(int i=1; i<=k; i++){
        for(int j=1; j<=n; j++){
            for(auto &next: tree[j]){
                dp[i][j][1] = ((dp[i][j][1]%p)+(dp[i-1][next][1-(j==x)]%p))%p;
                dp[i][j][0] = ((dp[i][j][0]%p)+(dp[i-1][next][(j==x)]%p))%p;
            }
        }
    }
    cout << dp[k][t][0] << endl;
}

2

const int maxn = 20;
int n, m, inf = 1e9+10;
vector<vector<int>> tree;
struct node{
    int last, musk;
};
void solve(){
    cin >> n >> m;
    vector<vector<int>> ctree(n, vector<int>());
    swap(ctree, tree);
    for(int i=0, u, v; i<m; i++){
        cin >> u >> v;
        u--, v--;
        tree[u].push_back(v);
        tree[v].push_back(u);
    }
    int max_musk = (1<<n);
    int dp[n][max_musk];
    for(int i=0; i<n; i++){
        for(int k=0; k<max_musk; k++){
            dp[i][k] = inf;
        }
    }
    queue<node> q;
    for(int i=0; i<n; i++){
        dp[i][1<<i] = 1;
        q.push({i, 1<<i});
    }
    dp[0][0] = 0;
    while(!q.empty()){
        node now = q.front();   q.pop();
        int u = now.last, state_u = now.musk;
        for(auto &v: tree[u]){
            int new_musk = state_u^(1<<v);
            if(dp[u][state_u]+1 < dp[v][new_musk]){
                dp[v][new_musk] = dp[u][state_u]+1;
                q.push({v, new_musk});
            }
        }
    }
    int ans = 0;
    for(int i=0; i<max_musk; i++){
        int cnt = 1e9+10;
        for(int k=0; k<n; k++){
            cnt = min(dp[k][i], cnt);
        }
        ans += cnt;
    }
    cout << ans << endl;
}

写了两天项目,一下给熔断了

posted @ 2025-03-07 15:25  Devpp  阅读(10)  评论(0)    收藏  举报