[Gym-101174K] [Problem K] 判环+ 码力+ 题意
来源:互联网 发布:js的ajax请求 编辑:程序博客网 时间:2024/05/18 01:32
参考https://vjudge.net/solution/7644516
心得:
- 这里的 u>=v的限定 ,然后又有 对于边的map映射…
- 对于这种的重边的情况,可以这样用map.
- 注意当用map 的时候用这个point 的时候会有的错误.
- 判环应该更简洁
- fst,和ff
然而下面的代码是错的,不想看了
struct point{ int x,y,z; point (int x=0,int y=0,int z=0):x(x),y(y){} //point (int x,int y,int z):x(0),y(0),z(0){} bool friend operator<(point a,point b){ return a.x<b.x||(a.x==b.x&&a.y<b.y)||(a.x==b.x&&a.y==b.y&&a.z<b.z); }};struct point2{ int x,y; point2(int x=0,int y=0):x(x),y(y){} //point2(int x,int y):x(0),y(0){} bool friend operator <(point2 a,point2 b){ return a.x<b.x||(a.x==b.x&&a.y<b.y); }};int n;map<point,int>mp1;map<point2,int >mp2;map<pii,int>f1,f2;int cnt1,cnt2;int ok;int id1(int x,int y,int z){ if(mp1.count(point(x,y,z))==0){ mp1[point(x,y,z)]=++cnt1; } return mp1[point(x,y,z)];}int id2(int x,int y){ if(mp2.count(point2(x,y))==0){ mp2[point2(x,y)]=++cnt2; } return mp2[point2(x,y)];}int vis[N];int fst[N<<1],nxt[N<<2],ff[N<<1],vv[N<<2],e;void dfs1(int u,int p){ if(vis[u]){ ok=1;return ; } vis[u]=1; for(int i=fst[u];~i&&!ok;i=nxt[i]){ int v=vv[i]; if(v==p)continue; dfs1(v,u); }}void dfs2(int u,int p){ if(vis[u]){ ok=1;return; } vis[u]=1; for(int i =ff[u];~i&&!ok;i=nxt[i]){ int v=vv[i]; if(v==p)continue; dfs2(v,u); }}void init(){ mem(fst,-1); mem(ff,-1);e=0;}void add(int u,int v){ vv[e]=v;nxt[e]=fst[u];fst[u]=e++;}void _add(int u,int v){ vv[e]=v;nxt[e]=ff[u];ff[u]=e++;}int main(){ ree //cin>>n; sf("%d",&n); init(); cnt1=0,cnt2=0; rep(i,1,n){ int x,y,z,xx,yy,zz; sf("%d%d%d%d%d%d",&x,&y,&z,&xx,&yy,&zz); int u=id1(x,y,z),v=id1(xx,yy,zz); if(u<v)swap(u,v); if(u==v)continue; if(f1.count(MP(u,v))==0){ f1[MP(u,v)]=1; add(u,v);add(v,u); } u=id2(x,y);v=id2(xx,yy); if(u<v)swap(u,v); if(u==v)continue; if(f2.count(MP(u,v))==0){ f2[MP(u,v)]=1; _add(u,v);_add(v,u); } } //cout<<cnt1<<' '<<cnt2<<endl; ok=0; mem(vis,0); for(int i=1;i<=cnt1;++i){ if(!vis[i]){ dfs1(i,i); if(ok)break; } } if(ok)puts("True closed chains"); else puts("No true closed chains"); ok=0; mem(vis,0); for(int i=1;i<=cnt2;++i){ if(!vis[i]){ dfs2(i,i); if(ok)break; } } if(ok)puts("Floor closed chains"); else puts("No floor closed chains");}
阅读全文
0 0
- [Gym-101174K] [Problem K] 判环+ 码力+ 题意
- Codeforces Gym 100623K Problem K. Key to Success
- GYM 100685 K
- Gym 100796K Profact
- Gym 100947K-Jpeg
- codeforces [Gym-100814K]
- Gym-101498K
- Gym 101490K
- Gym 101512K
- [Gym-101201K]
- Gym 101490K dp
- Gym 101164.K
- Gym 101398. K
- Problem K
- Problem K
- Problem K
- Problem K
- Problem K
- leetcode---path-sum---树
- brew install curl- (4) 错误
- (M)Dynamic Programming:64. Minimum Path Sum
- Spring--方法注入
- [JZOJ5394]【NOIP2017提高A组模拟10.5】Ping
- [Gym-101174K] [Problem K] 判环+ 码力+ 题意
- 2017年10月05日普及组 约数
- 特征提取模型系列之CNN设计
- DTD声明的4种方式
- Mathematica入门习题
- 直接插入排序算法
- 2017年10月05日普及组 负进制
- 各种符号读法
- Java内部类