zoj 3761
2014-03-02 23:07
246 查看
很简单但很虐心的一道题;
我感觉自己的算法没错,但是老是过不了;= =
但是还是把代码贴出来;
我的方法,用并查集的方式做一课树,然后对树进行遍历;
有多少棵树就有多少个点剩余;
View Code
我感觉自己的算法没错,但是老是过不了;= =
但是还是把代码贴出来;
我的方法,用并查集的方式做一课树,然后对树进行遍历;
有多少棵树就有多少个点剩余;
#include<cstdio> #include<cstring> #define maxn 2009 #include<algorithm> #define inf 1e9 using namespace std; char s[4][10]={"LEFT","DOWN","RIGHT","UP"}; struct node { int x,y; int son[4]; int d[4]; } no[maxn]; bool vis[maxn]; int f[maxn]; int check(int a,int b) { return (abs(no[a].x-no[b].x)+abs(no[a].y-no[b].y)); } int find(int x) { return f[x]==x?x:f[x]=find(f[x]); } void un(int x,int y) { int a=find(x); int b=find(y); if(a!=b) f[a]=b; return; } void dfs(int x,int f) { vis[x]=1; for(int i=0;i<4;i++) { int v=no[x].son[i]; if(v!=-1&&!vis[v]) { dfs(v,x); } } if(f!=-1) { for(int i=0;i<4;i++) { if(no[f].son[i]==x) { printf("(%d, %d) %s\n",no[x].x,no[x].y,s[i]); } } } } int main() { int n; while(scanf("%d",&n)!=EOF) { for(int i=0; i<n; i++) { scanf("%d%d",&no[i].x,&no[i].y); for(int j=0; j<4; j++) { no[i].son[j]=-1; no[i].d[j]=inf; f[i]=i; } } for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { if(i==j)continue; if(no[i].x==no[j].x) { un(i,j); if(no[j].y<no[i].y) { if(check(i,j)<no[i].d[3]) { no[i].son[3]=j; no[i].d[3]=check(i,j); } } else { if(check(i,j)<no[i].d[1]) { no[i].son[1]=j; no[i].d[1]=check(i,j); } } } else if(no[i].y==no[j].y) { un(i,j); if(no[j].x<no[i].x) { if(check(i,j)<no[i].d[2]) { no[i].son[2]=j; no[i].d[2]=check(i,j); } } else { if(check(i,j)<no[i].d[0]) { no[i].son[0]=j; no[i].d[0]=check(i,j); } } } } } int ans=0; for(int i=0;i<n;i++) { if(f[i]==i) ans++; } printf("%d\n",ans); memset(vis,0,sizeof vis); for(int i=0;i<n;i++) { dfs(i,-1); } } return 0; }
View Code
相关文章推荐
- zoj 3761 Easy billiards 乱搞
- Easy billiards (zoj 3761 并查集+DFS)
- ZOJ 3761 —— Easy billiards(并查集+深搜)
- [贪心+dfs] ZOJ 3761 Easy billiards
- zoj 3761 Easy billiards(建图+贪心+dfs)
- zoj 3761 Easy billiards 并查集+dfs
- zoj 3761 Easy billiards(dfs搜索树)
- ZOJ 3761 Easy billiards 月赛E DFS
- zoj 3761(并查集+搜索)
- ZOJ 3761 Easy billiards (DFS性质)
- Zoj 3761 Easy billiards dfs
- ZOJ 3761 —— Easy billiards(并查集+深搜)
- ZOJ 3761 Easy billiards(并查集+树遍历)
- zoj 3761 Easy billiards
- ZOJ 3761——Easy billiards(DFS,并查集)
- ZOJ 3761 Easy billiards[dfs]
- zoj 3761 Easy billiards
- network 最小生成树 Kruskal 算法 poj 1861 zoj 1542
- ZOJ 2788 Panic Room 最小割
- [ZOJ 1011] NTA (dfs搜索)