周赛G题 华山论剑
来源:互联网 发布:linux sh 输入密码 编辑:程序博客网 时间:2024/04/28 03:44
题目链接:点击打开链接
这题也是我TLE中的一个,一开始我想到的是并查集,但是为什么会想到并查集,可能是最近又一次的搞过并查集。但是,很是脑残的是一直RE,就是找不出为什么会这样。然后就一直改改改,直接改成TLE了,很是郁闷。就有给放弃了。
附上RE代码:
//RE----------------------#include<cstdio>const int N=300005;int n,m,father[N];void Init(){ for(int i=1;i<=n;i++) father[i]=i;}int find(int x){ if(x!=father[x]) father[x]=find(father[x]);}int main(){ while(scanf("%d%d",&n,&m)!=EOF) { Init(); int l,r,xi; for(int i=1;i<=m;i++) { scanf("%d%d%d",&l,&r,&xi); for(int j=l;j<=r;j++) { if(j!=xi) { int Xfather=find(j); if(Xfather==j) father[j]=xi; } } } for(int i=1;i<=n;i++) { if(i==n) { if(father[i]==i) printf("0\n"); else printf("%d\n",father[i]); } else { if(father[i]==i) printf("0 "); else printf("%d ",father[i]); } } } return 0;}
后来看题解,我笑了,确实是并查集,但是维护father数组,很是有特点,而且有学会了并查集的一种用法,快速查找的功能。很是巧妙。
附上AC代码。
#include<cstdio>const int N=300005;int n,m,father[N],ans[N];int find(int x){ if(x!=father[x]) father[x]=find(father[x]); return father[x];}void Init(){ for(int i=0;i<=n+1;i++) father[i]=i,ans[i]=0;}int main(){ while(~scanf("%d%d",&n,&m)) { Init(); int l,r,xi; for(int i=1;i<=m;i++) { scanf("%d%d%d",&l,&r,&xi); //----------------------------- //快速查找区间上的存活人员. for(int j=find(l);j<=r;j=find(j+1)) { if(j==xi) continue; ans[j]=xi; //----------------------- //不好理解的估计就是这儿了.怎样维护father数组 if(j<xi) father[j]=xi; else father[j]=father[r+1];//可以直接查找到下一个没有被杀的. } } for(int i=1;i<=n;i++) { if(i==n) printf("%d\n",ans[i]); else printf("%d ",ans[i]); } } return 0;}
由此题可以看出,有时候思路是正确的,只是自己的一些处理方法不对,如果进一步的思考可能会有思路。深入思考,这是更好的方法。
- 周赛G题 华山论剑
- 华山论剑
- 华山论剑
- 华山论剑:算法
- NYOJ 华山论剑
- nyoj 华山论剑
- 杀毒的华山论剑
- 国内SNS市场“华山论剑”
- 中国SNS市场“华山论剑”
- b2b网站华山论剑
- 华山论剑(nyoj 856)
- 华山论剑- 乐杨俊
- 【转载】网络基础-华山论剑
- JAVA之华山论剑
- Nhibernate分析之华山论剑篇
- Nhibernate分析之华山论剑篇
- 邀请你一起玩“华山论剑”
- WIFI和ZIGBee的华山论剑
- VS2012 连接 SQL Server 2012 Express
- 战报交流问题分析(gossip problem)
- GNU M4
- Prim 模板
- Linux下截图软件scrot的安装
- 周赛G题 华山论剑
- 排序命令&参数代换args
- Android---接收来自另一个设备的文件
- java四个有用的过滤器
- 网站制作---科讯万能搜索系统的简单实用教程
- 结构体对其问题
- Asp.net Basic Part(1)
- linux- Shell变量命令之单引号与双引号的区别
- fsockopen学习笔记