LightOJ 1300 - Odd Personality
来源:互联网 发布:办公室做数据是做什么 编辑:程序博客网 时间:2024/05/21 22:52
题意:
有多少个点可以走n次之后回到该点 ,n为奇数,
这里不是所有点都联通的,
#include <iostream>#include <cstdio>#include <cstring>#include <queue>#include <stack>#include <algorithm>#include <cmath>#include <map>using namespace std;const int N = 10009;const int M = 40009;struct LT{ int nex,to;} L[M];int F[N],cnt=0;void add(int f,int t){ L[cnt].nex = F[f]; L[cnt].to = t; F[f] = cnt++;}int n,m;void init(){ int a,b; scanf("%d%d",&n,&m); memset(F,0,sizeof(F));cnt=1; for(int i=0;i<m;i++) { scanf("%d%d",&a,&b); add(a,b);add(b,a); }}int dfn[N],low[N],post[N],ind,color,col[N];stack<int>S;void tarjan(int k,int fa){ //cout<<k<<endl; dfn[k]=low[k] = ind++; S.push(k);post[k] = 1; for(int i=F[k];i;i=L[i].nex) { int to = L[i].to; if(to==fa) continue; if(!dfn[to]) { tarjan(to,k); low[k] = min(low[k],low[to]); } else if(post[to]&&dfn[to]<low[k]) low[k] = dfn[to]; } if(low[k]==dfn[k]) { int i;color++; for(i=S.top(),S.pop();i!=k;i=S.top(),S.pop()) { col[i] = color; post[i] = 0; } post[k] = 0,col[k] = color; }}int dp[N][2];int v[N];struct nod{ int to,c;};queue<nod>que;void op(int k){ // cout<<k<<endl; int co = col[k]; nod e,t; while(!que.empty()) que.pop(); e.c =0,e.to = k; que.push(e); dp[k][0] =1; v[k] = 1; // cout<<"KKKKK"<<endl; while(!que.empty()) { // cout<<"LLL"<<endl; e = que.front() ;que.pop(); // cout<<" "<<e.to<<endl; int p = e.c^1; for(int i=F[e.to];i;i=L[i].nex) { int to = L[i].to; if(col[to]!=co) continue; v[to] = 1; if(dp[to][p]==0) { dp[to][p]=1; t.to = to,t.c = p; que.push(t); } } }}void solve(){ memset(dfn,0,sizeof(dfn));ind = 1;color = 0; for(int i=0;i<n;i++) if(!dfn[i]) tarjan(i,-1); memset(dp,0,sizeof(dp)); memset(v,0,sizeof(v)); int ans = 0; for(int i=0;i<n;i++) if(!v[i]) { op(i); } for(int i=0;i<n;i++) if(dp[i][0]&&dp[i][1]) ans++; printf("%d\n",ans);}int main(){ freopen("in.txt","r",stdin); int cas,T=1; scanf("%d",&cas); while(cas--) { init(); printf("Case %d: ",T++); solve(); } return 0;}
- LightOJ 1300 - Odd Personality
- Light OJ 1300 - Odd Personality
- LightOJ - 1300 Odd Personality(边双连通+奇圈判定)
- Light OJ 1300 - Odd Personality (Tarjian求边双连通+二分图染色法判定奇圈)
- personality
- programmer personality type
- Programmer Personality Test
- Examining Driver Personality Information
- about work and personality
- Careers for ESFP Personality Types
- a personality that people admire
- Personality Characteristics of Great Designers
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- LightOJ
- [LightOJ
- 如何利用组件在flash中加调色板
- 3.4 最简单的设备驱动——LED灯驱动
- 第二章 Shell程序设计
- 第三章 文件操作
- 指针出参探究
- LightOJ 1300 - Odd Personality
- 我们一起学MAC编程吧(1)
- 第四章 Linux环境
- APK编译过程
- 利用百度地图API定位为什么使用百度自己开发的locSDK2.6.jar包
- [mule3doc]Mule3 user guide翻译计划
- myeclipse常用快捷键简介
- 关于Android usb host 总结
- JDK各文件夹作用