「杂题乱刷2」CF1738F Connectivity Addicts
1.「算法笔记」构造选讲2.「杂题乱刷」CF1221B3.「杂题乱刷」CF468A4.「杂题乱刷」AT_abc337_e5.「杂题乱刷」洛谷 P88666.「杂题乱刷」CF1937C & CF1936A7.「杂题乱刷」CF1934D28.「杂题乱刷」at_abc092_d & AT_arc093_b9.「杂题乱刷」CF74E10.「杂题乱刷」AT_abc096_d11.「杂题乱刷」CF1973D12.「杂题乱刷」CF1977B13.「杂题乱刷」P827914.「杂题乱刷」P1067815.「杂题乱刷2」CF1015D Walking Between Houses16.「杂题乱刷2」CF1889A Qingshan Loves Strings 217.「杂题乱刷2」CF1567D18.「杂题乱刷2」CF1493C19.「杂题乱刷2」CF862C20.「杂题乱刷2」CF1365G21.「杂题乱刷2」AT_arc184_a22.「杂题乱刷2」CF1370F223.「杂题乱刷2」CF2040D
24.「杂题乱刷2」CF1738F Connectivity Addicts
25.「杂题乱刷2」CF109D题目链接
解题思路
我们发现取度数大的点可以建的图显然最优秀,具体原因下面会讲,并且同一个连通块内的节点染成一种颜色一定合法。那么此时我们将所有节点从大到小排序,然后直接暴力建图即可,我们每次询问会存在两种情况,我们设询问到的节点为
-
若
已经被染上颜色了,那么直接将此节点与 节点连边,退出此节点查询。 -
若
没有被染上颜色,那么直接将此节点与 节点连边,继续进行此节点的查询。
那么此时由于度数是从大到小连边,此时必定有
参考代码
ll ask(ll x)
{
cout<<"? "<<x<<endl;
ll y;
cin>>y;
return y;
}
ll n;
pii a[1000010];
ll col[1000010];
ll id;
void solve()
{
id=0;
cin>>n;
forl(i,0,n+5)
col[i]=0;
forl(i,1,n)
cin>>a[i].x,
a[i].y=i;
sort(a+1,a+1+n);
reverse(a+1,a+1+n);
forl(i,1,n)
if(!col[a[i].y])
{
vector<ll>v;
ll num=0;
forl(j,1,a[i].x)
{
num=ask(a[i].y);
v.pb(num);
if(col[num])
break;
}
ll Col=col[num]?col[num]:++id;
col[a[i].y]=Col;
for(auto j:v)
col[j]=Col;
}
cout<<"! ";
forl(i,1,n)
cout<<col[i]<<' ';
cout<<endl;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
2024-02-13 「杂题乱刷」洛谷 P10155