1 条题解
-
0
以下仅供参考
#include<bits/stdc++.h> #define pb push_back #define MaxN 10500 using namespace std; vector<int>g[MaxN],p[MaxN]; int cnt;int s[MaxN];int sp;int ans[MaxN];int tn; bool dis[MaxN];bool vis[MaxN];bool e[MaxN]; void pfs(int u) { vis[u]=1; for (int i=0,v;i<g[u].size();i++) if (!vis[v=g[u][i]]) { dis[v]=dis[u]^1; e[p[u][i]]=1; pfs(v); } else if(!e[p[u][i]]) { e[p[u][i]]=1; if (dis[u]==dis[v]) { cnt++;s[u]++;s[v]--; sp=p[u][i]; } else { s[u]--; s[v]++; } } } void dfs(int u) { vis[u]=1; for (int i=0,v;i<g[u].size();i++) if(!vis[v=g[u][i]]) { dfs(v); if (s[v]==cnt)ans[++tn]=p[u][i]; s[u]+=s[v]; } } int n,m; int main() { scanf("%d%d",&n,&m); for (int i=1,u,v;i<=m;i++) { scanf("%d%d",&u,&v); g[u].pb(v); p[u].pb(i); g[v].pb(u); p[v].pb(i); } for (int i=1;i<=n;i++) { if (!vis[i])pfs(i); } if (!cnt) { printf("%d\n",m); for (int i=1;i<=m;i++) { printf("%d ",i); } return 0; } for(int i=1;i<=n;i++)vis[i]=0; for(int i=1;i<=n;i++) { if(!vis[i])dfs(i); } if(cnt==1) ans[++tn]=sp; printf("%d\n",tn); sort(ans+1,ans+tn+1); for (int i=1;i<=tn;i++) { printf("%d ",ans[i]); } return 0; }
- 1
信息
- ID
- 7014
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 10
- 标签
- 递交数
- 4
- 已通过
- 3
- 上传者