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; }
题意:给你一个数组,让他自身拼接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 }
这是一道图论的构造题,有时候不必纠结样例一样不,比如说第二个样例的输出结果
给了n 个点,n - 1条边,每条边的两个端点u,v 找u,v对应的最大的最小
n 个顶点的树是n--1条边
如果是链的话,这几个数字怎么排都可以
如果不是的话,节点的度= 3的时候,排0,1,2
>3的话,就变成任意链了,自己画一下就知道了