比赛
F题
树的染色
参考博客
分析
如果只有一个点,当然只要一种颜色就行。
如果是棵树,没有环,答案是2。
如果有环,且有节点数为奇数的环,答案是3,否则是2。
这个题保证是树
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e5+9;
const ll mod = 1e9 + 7;
int n;
int u ,v;
long long a[maxn];
void work()
{
cin >> n;
for(int i = 1; i < n; ++i)
scanf("%d %d", &u, &v);
if(n == 1) cout << 1 << endl;// 特判1
else cout << 2 << endl;
}
int main()
{
int t;
cin >> t;
while(t--)
work();
return 0;
}
I题 最大序列美观度
// dp
#include<bits/stdc++.h>
using namespace std;
const int N= 1e6+7;
int n,a[N],last[N], f[N];
int main()
{
scanf("%d", &n);
for (int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
if(last[a[i]] != 0) f[i] = max(f[i-1], f[last[a[i]]]+1);
else f[i] = f[i-1];
last[a[i]] = i;
}
cout << f[n];
return 0;
}
——————————————
// 贪心
#include <bits/stdc++.h>
using namespace std;
int a[1000010];//
map<int, int> m;
int main()
{
int n;
cin >> n;
for (int i = 1; i <= n; i++)
cin >> a[i];
long long sum = 0;
for (int i = 1; i <= n; i++)
{
// cout<<i<<" "<<a[i]<<" "<<m[a[i]]<< endl;
if (m[a[i]])
{
sum++;
m.clear();
}
m[a[i]]=1;
}
cout<<sum<<endl;
return 0;
}