把博客园图标替换成自己的图标
把博客园图标替换成自己的图标end

题解 P7763 [COCI2016-2017#5] Ronald

洛谷

题意

显然。

分析

对于此题,我们可以从最终状态反推。

最终状态是什么,就是我们所有的节点两两链接(下命名为全联通),而最后一步的前一步的状态是什么呢,这明显是确定的,就是一个节点单独,其他节点仍然全联通,再操作一个节点呢,不难发现,现在是两个节点全联通,剩下的全联通。

以此类推,不难证明,我们回推的图必然是两个全联通图或者是本身就是满足。

由此得到结论,如果所有的节点与其边能够构成两个或一个全联通,那么就输出 DA。

怎么判断是否全联通呢?我们只用判断边数与点数的关系即可。

若 $siz\times (siz-1)=edge\times 2$,所有节点两两联通,即为全联通。

至于连接的过程,我们用并查集维护即可。

for(int i=1; i<=m; ++i) {
    int u=read(),v=read();
    u=find(u),v=find(v);
    if(u==v) edge[u]++;
    else {
        fa[v]=u;
        siz[u]+=siz[v];
        edge[u]+=edge[v]+1;
    }
}
int cnt=0,flag=0;
for(int i=1; i<=n; ++i) {
    if(fa[i]==i) {
        ++cnt;
        if((!check(i))||cnt>2) {
            cout<<"NE";
            return 0;
        }
    }
}
cout<<"DA";
posted @ 2023-08-26 21:26  djh0314  阅读(36)  评论(0)    收藏  举报  来源
浏览器标题切换
浏览器标题切换end