| Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
|---|---|---|---|---|---|---|---|---|---|
| 38856 | LYLAKIOI | 【BJ】T1 | C++ | 内存超限 | 40 | 2794 MS | 550912 KB | 1793 | 2025-11-10 18:45:09 |
#include<bits/stdc++.h> #define up(i,l,r) for(int i=(l);i<=(r);++i) #define down(i,l,r) for(int i=(l);i>=(r);--i) #define pi pair<int,int> #define p1 first #define p2 second #define m_p make_pair #define p_b push_back using namespace std; typedef long long ll; inline ll read(){ ll x=0;short t=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')t=-1;ch=getchar();} while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar(); return x*t; } const int N=4e6+10,maxn=1e7+10; int n,m,dfn[N],low[N],is[maxn],col[N],sz[N],cnt; vector<pi>E[N]; vector<int>G[N]; int ex[maxn],ey[maxn],deg[N]; vector<int>cyc[N]; void dfs(int u,int fa){ dfn[u]=low[u]=++cnt; for(auto it:E[u])if(it.p2!=fa){ if(!dfn[it.p1]){ dfs(it.p1,it.p2); if(low[it.p1]>=dfn[u])is[it.p2]=1; low[u]=min(low[u],low[it.p1]); }else low[u]=min(low[u],dfn[it.p1]); } } void dfs2(int u,int c){ col[u]=c;++sz[c];cyc[c].p_b(u); for(auto it:E[u])if((!col[it.p1])&&(!is[it.p2]))dfs2(it.p1,c); } int dfs3(int u,int fa){ int res=0; for(int x:G[u])if(x!=fa)res+=dfs3(x,u); if(sz[u]==1)return res; int cnt=0;for(int p:cyc[u])cnt+=deg[p]>0; if(cnt<=1)res++; return res; } void slv(){ n=read(),m=read(); up(i,1,m)ex[i]=read(),ey[i]=read(),E[ex[i]].p_b({ey[i],i}),E[ey[i]].p_b({ex[i],i}); up(i,1,n)if(!dfn[i])dfs(i,0); up(i,1,n)if(!col[i])dfs2(i,++col[0]); up(i,1,m)if(col[ex[i]]!=col[ey[i]])G[col[ex[i]]].p_b(col[ey[i]]),G[col[ey[i]]].p_b(col[ex[i]]),++deg[ex[i]],++deg[ey[i]]; int res=dfs3(1,0),c=0; up(i,1,n)if(deg[i]&1)c++;res+=c/2; cout<<res; } int main(){ //freopen("graph.in","r",stdin),freopen("graph.out","w",stdout); slv(); return 0; }