#include <cstdio>
#include <vector>
using namespace std;
const int N = 1005;
int n, m;
vector<int> g[N]; // g[x]:点 x 的所有邻居(邻接表)
bool visited[N]; // visited[x]:点 x 来过没有
void dfs(int x) {
visited[x] = true; // 1. 打记号:x 来过了
printf("%d ", x); // 记入访问顺序
for (int i = 0; i < (int)g[x].size(); i++) { // 2. 依次看 x 的每个邻居
int y = g[x][i];
if (!visited[y]) { // 3. 没来过,才往深处走
dfs(y);
}
}
} // 4. 邻居都看完了,函数结束,自动返回上一层
int main() {
scanf("%d%d", &n, &m);
for (int i = 1; i <= m; i++) {
int u, v;
scanf("%d%d", &u, &v);
g[u].push_back(v); // 无向图,两个方向都要存
g[v].push_back(u);
}
dfs(1);
printf("\n");
return 0;
}
#include <iostream>
using namespace std;
int n, q;
int a[8005];
int rk[8005]; // rk[i]:a[i]排序后所处的位置
// 值为p、下标为x的元素,是否排在值为r、下标为y的元素前面
bool front(int p, int x, int r, int y) {
if (p != r) return p < r; // 值小的在前
return x < y; // 值一样,下标小的在前(稳定排序)
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> n >> q;
for (int i = 1; i <= n; i++) cin >> a[i];
// 初始化:对每个i,数有多少个元素排在它前面
for (int i = 1; i <= n; i++) {
rk[i] = 1;
for (int j = 1; j <= n; j++) {
if (j != i && front(a[j], j, a[i], i)) rk[i]++;
}
}
while (q--) {
int op;
cin >> op;
if (op == 1) {
int x, v;
cin >> x >> v;
int old = a[x]; // 修改前的值
a[x] = v; // 修改
// 先重新算x自己的位置
rk[x] = 1;
for (int i = 1; i <= n; i++) {
if (i != x && front(a[i], i, a[x], x)) rk[x]++;
}
// 再修正别的元素
for (int i = 1; i <= n; i++) {
if (i == x) continue;
bool before = front(old, x, a[i], i); // 修改前,x在i前面吗
bool after = front(v, x, a[i], i); // 修改后,x在i前面吗
if (!before && after) rk[i]++; // 新增了一个排在前面的
if (before && !after) rk[i]--; // 少了一个排在前面的
}
} else {
int x;
cin >> x;
cout << rk[x] << "\n"; // O(1)直接回答
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int w[5]={0,2,3,7,4};
int v[5]={0,1,3,9,5};
int dp[11];
int main()
{
for(int i=1;i<=4;i++)
for(int j=w[i];j<=10;j++)
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
cout<<dp[10];
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int w[5]={0,2,3,7,4};
int v[5]={0,1,3,9,5};
int dp[5][11];
int main()
{
for(int i=1;i<=4;i++)
for(int j=1;j<=10;j++)
if(j<w[i]) dp[i][j]=dp[i-1][j];
else
dp[i][j]=max(dp[i-1][j],dp[i][j-w[i]]+v[i]);
cout<<dp[4][10];
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int w[5]={0,2,3,7,4};
int v[5]={0,1,3,9,5};
int dp[11];
int main()
{
for(int i=1;i<=4;i++)
for(int j=10;j>=w[i];j--)
dp[j]=max(dp[j],dp[j-w[i]]+v[i]);
cout<<dp[10];
return 0;
}
#include<bits/stdc++.h>
using namespace std;
int w[5]={0,2,3,7,4};
int v[5]={0,1,3,9,5};
int dp[5][11];
int main()
{
for(int i=1;i<5;i++)
for(int j=1;j<=10;j++)
if(j<w[i]) dp[i][j]=dp[i-1][j];
else
dp[i][j]=max(dp[i-1][j],dp[i-1][j-w[i]]+v[i]);
cout<<dp[4][10];
return 0;
}