正解:构造
解题报告:
话说这题我理解题意理解了好久TT一直没懂那个,k的意义是什么,,,后来才明白,可能k就是没有意义的趴
(upd:好像明白辣,k是用来保证这么做是对的QwQ
然后就直接港正解趴QAQ
这题其实做了消防局的设立和将军令之后,就还是比较简单?直接一样的套路怼上去,然后就好了,,,?
其实真的没什么好写题解的,,,但是我就是想写因为这题真的卡了我好久呜呜呜,,,
没了QAQ
哦想起来还唠叨一句,,,如果你90pts第6个点超时,可能是数组开小了,改大点儿就过了_(:з」∠)_
#include<bits/stdc++.h>
using namespace std;
#define ll int
#define rg register
#define il inline
#define rp(i,x,y) for(rg ll i=x;i<=y;++i)
using namespace std;const ll N=+,M=+;
ll n,m,tmp,head[N],cnt,as[N];
bool vis[N];
struct ed{ll to,nxt;}edge[M<<];il ll read()
{
rg char ch=getchar();rg ll x=;rg bool y=;
while(ch!='-' && (ch>'' || ch<''))ch=getchar();
if(ch=='-')y=,ch=getchar();
while(ch>='' && ch<='')x=(x<<)+(x<<)+(ch^''),ch=getchar();
return y?x:-x;
}
il void ad(ll x,ll y){edge[++cnt].to=y;edge[cnt].nxt=head[x];head[x]=cnt;}int main()
{
n=read();m=read();tmp=read();rp(i,,m){ll t1=read(),t2=read();ad(t1,t2);ad(t2,t1);}
rp(i,,n)if(!vis[i]){for(rg ll j=head[i];j;j=edge[j].nxt){for(rg ll k=head[edge[j].to];k;k=edge[k].nxt)vis[edge[k].to]=;vis[edge[j].to]=;}as[++as[]]=i;vis[i]=;}
printf("%d\n",as[]);rp(i,,as[])printf("%d ",as[i]);
return ;
}
这儿是代码QwQ