作业graph position解题报告_第1页
作业graph position解题报告_第2页
作业graph position解题报告_第3页
作业graph position解题报告_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、GraphitionTime Limit: 0.5 second Memory Limit: 1 000 KBThere is a simple graph wi n even number of edges. You are to define if it is sible to present it by the set of pairs of adjacent edges (having a common vertex).Inputcontains a sequence of the numbers pairs. Each pair denotes vertiidentifiers of

2、 one edge. All the identifiers areegers from 1 to 1000.You may amet the input is correct, i.e there are noloops andmultiple edgeshe graph definedby theinput data.Output“1”“0”(withoutquoionmarks),iftheitionissibleandotherwise.Sle InputS 1231le input #123110S 1234le input #223110Sle OutputS 1le output

3、 #1Sle output #20试题简介(URAL1320):给定一个无向图,并且满足:(1)(2)(3)图中不存在重边和连向自身的弧总边数为偶数结点不超过 1000 个问你能否将图中的边划分成两个一组,使得每组中的两条边在原图中有公共结点。分析:从问题的规模看,用枚举明显是不可能的。可以肯定的是,若某个连通块中包含了奇数条边,该图一定无解(无论怎么分,最后至少会留下一条弧没法配对)。反过来思考,如果图中的所有连通块都包含了偶数条边,是不是一定有解呢?通过列举几个简单数据,发现确实如此,下面就要尝试着证明这个结论。对图中的每通块做一次 DFS 遍历,得到其对应的搜索树。由于图中可以有环,所以

4、这棵树上可能存在后向弧。定义每次操作先找到树中深度最深的点X(显然X 为叶子结点),设 X 的父亲为Y。那么可能出现如下情况:(1)(2)(3)X 有多于 2 条后向弧,去掉这两条后向弧。X 只有 1 条后向弧,去掉这条后向弧,并去掉 X 和Y 之间的弧。X 没有后向弧,但是 Y 有后向弧,去掉 X、Y 之间的弧和 Y 的一条后向弧。X、Y 都没有后向弧,但是 Y 除了 X 以外还有至少 1 个儿子结点。由于 X 是最深点,所以 Y 的其它儿子也是叶子结点,去掉 X、Y 的连边,Y与它另外一个儿子的连边。X、Y 都没有后项弧,而且 Y 除了 X 外没有儿子结点,由于前面假定了该连通块中包含偶数

5、条边,前面 4 步每次都删除 2 条边,因此 Y 必定(4)(5)不是根结点(否则就只剩它连X 的这一条边了,与假设以去掉X 与 Y 之间以及 Y 与 Y 父亲之间的连边。),可每进行一次操作,就成功将两条边划分为一组,并且剩下的仍然是一棵树,只要像这样不断地操作下去,直到子图中所有弧都被剔除,就能得到一个满足条件的方案。综合上面的分析,就可以得到如下结论:图G 存在一个合法划分方案的充要条件是,G 中的每个连通块都包含了偶数条边。接下来就很简单了,采用最简单的并查集,就可以用O(N)的空间复杂度, O(M)的时间复杂度高效地解决该问题。参考程序:$r-,s-,q- const infnsou

6、tfns maxnvar tree, edge=:input.txt;output.txt; 1000;array1. maxn ofeger;function findroot(x var root, now, temp beginnow :=x;while treenow :eger) :eger; 并查集子过程eger;0do now :=treenow;root :=now; now :=x; while now root do begintemp :=treenow; treenow :=root; now end;whilefindroot :=root;end;findroot:

7、=temp;procedure main; 并查集主过程var rootx, rooty, x, y :begineger;assign(input, infns); reset(input);fillchar(tree, sizeof(tree), fillchar(edge, sizeof(edge), while not eof do beginreadln(x, y);rootx :=findroot(x); rooty$ff);0);:=findroot(y);if rootx rooty then beginif treerootx treerooty then beginedge

8、rootx treerootxtreerooty:=edgerootx:=treerootx:=rootx;+edgerooty +treerooty;1;endthen else beginedgerooty treerooty treerootxend;else:=edgerootx:=treerootx:=rooty;+edgerooty +treerooty;1;end else inc(edgerootx); end;whileclose(input);end;mainprocedure out;var i, ansbegin:eger; assign(output, outfns); rewrite(output);ans :=1;for i

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论