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;
}
写了两天项目,一下给熔断了

浙公网安备 33010602011771号