cf628 div2

https://codeforces.com/contest/1325

#include <bits/stdc++.h>
using namespace std;
int n,t;

int main(){
    //freopen("in","r",stdin);
    ios::sync_with_stdio(0);
    cin >> t;
    while(t--){
        cin >> n;
        cout << 1 << " " << n - 1 << endl;
    }
    return 0;
}
View Code

题意:给你一个数组,让他自身拼接n次,找出LIS,如果数组里面的元素不重复的话,应该是n,如果重复应该怎么办呢

set可以排上用场了 此时也不会超时

 为什么这个题想不到呢?题意看不明白,不知道应该看哪一句话,

还有一句删除0或者全删除 ???

 

 1 #include <bits/stdc++.h>
 2 
 3 using namespace std;
 4 #define int long long
 5 const int maxn = 1e5 + 5;
 6 int n;
 7 int u, v;
 8 vector<int> g[maxn];
 9 int ans[maxn];
10 
11 signed main() {
12     //freopen("in", "r", stdin);
13     ios::sync_with_stdio(0);
14     cin >> n;
15 
16     for (int i = 1; i < n; i++) {
17         cin >> u >> v;
18         g[u].push_back(i);
19         g[v].push_back(i);
20         ans[i] = -1;
21     }
22     int cnt = 0;
23     for (int i = 1; i <= n; i++) {
24         if (g[i].size() >= 3) {
25             for (int j = 0; j < 3; j++) {
26                 ans[g[i][j]] = j;
27             }
28             cnt = 3;
29             break;
30         }
31     }
32 
33     for (int i = 1; i < n; i++) {
34         if (ans[i] == -1)
35             ans[i] = cnt++;
36     }
37     for (int i = 1; i < n; i++)
38         cout << ans[i] << endl;
39     return 0;
40 }
View Code

这是一道图论的构造题,有时候不必纠结样例一样不,比如说第二个样例的输出结果

 给了n 个点,n - 1条边,每条边的两个端点u,v 找u,v对应的最大的最小

n 个顶点的树是n--1条边 

如果是链的话,这几个数字怎么排都可以

如果不是的话,节点的度= 3的时候,排0,1,2

>3的话,就变成任意链了,自己画一下就知道了

猜你喜欢

转载自www.cnblogs.com/xcfxcf/p/12525497.html