全TLE,求调
查看原帖
全TLE,求调
1045286
z_y_w_楼主2024/12/6 22:05
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2e5+5;
int n, m;
struct Edge
{
    int u, v, nxt;
}edge[MAXN*2];
int head[MAXN*2], cnt;
int in()
{
	int k=0,f=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-')f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')k=k*10+c-'0',c=getchar();
	return k*f;
}
int add(int u, int v)
{
    edge[++cnt]={u, v, head[u]};
    head[u]=cnt;
}
int maxn=0, minn=0, ans1, ans2;
bool book[MAXN];
void dfs(int u, bool flag)
{
    //printf("%d %d\n", u, flag);
    if(book[u]) return;
    book[u]=1;
    if(flag==0) ans1++, flag=1;
    else if(flag==1) ans2++, flag=0;
    for(int j=head[u]; j; j=edge[j].nxt)
    {
        int v=edge[j].v;
        if(book[v]) continue;
        dfs(v, flag);
    }
}
int main()
{
    n=in(), m=in();
    for(int i=1; i<=m; i++)
    {
        int u=in(), v=in();
        add(u, v);
        add(v, u);
    }
    for(int i=1; i<=n; i++)
    {
        ans1=0, ans2=0;
        if(!book[i])
        {
            dfs(i, 0);
            maxn+=max(ans1, ans2);
            minn+=min(ans1, ans2);
        }
    }
    printf("%d %d", minn, maxn);


}
2024/12/6 22:05
加载中...