上交模板
上交所转让协议模板
上交所转让协议模板转让协议甲方:(上交所股东姓名)乙方:上海证券交易所鉴于甲方拥有上交所股权_______(股权份额),市场价格约为_______(每股价格),甲乙双方经友好协商,达成如下协议:一、股权转让1. 甲方同意将其所持有的上交所股权全部转让给乙方,乙方同意接受该股权转让。
2. 转让价格:甲方同意以每股_______的价格将股权转让给乙方,转让总价款为_______。
3. 转让进程:甲方将在签署本协议后_______个工作日内,向乙方提供完整的股权转让文件和相关手续。
4. 转让完成:甲方完成股权转让手续后,乙方将按照协议约定的方式向甲方支付转让款项。
二、附条件1. 甲方拥有上述股权的合法所有权,并无任何债务、负债、抵押或其他财产纠纷。
2. 甲方同意向乙方提供必要的资料和文件,以证明其拥有上述股权且无任何限制。
3. 甲方同意将股权转让事宜向上交所进行申报,并配合乙方办理相应的股权过户手续。
4. 甲方同意在转让完成后,将上述股权转让手续所需的费用负责支付。
三、保密条款甲乙双方同意对本协议内容及相关交易事项保密,不得向任何第三方披露,除非经对方事先书面同意或法律另有规定。
四、争议解决本协议涉及的任何争议,甲乙双方应该友好协商解决;协商不成的,任何一方均可向中国国际经济贸易仲裁委员会申请仲裁。
五、其他条款1. 本协议自双方签字盖章之日起生效,并具有法律效力。
2. 本协议一式两份,甲乙双方各执一份,具有同等法律效力。
3. 本协议的任何修改、补充或变更,必须以书面形式,并经甲乙双方签字盖章。
甲方:乙方:签字:签字:日期:日期:。
学校教师帮扶资料上交通知模板
通知
各专业课老师:
按照学校帮扶资料的要求,为了资料统一,特把相关需要准备的过程性资料通知如下:
资料1:指导老师和青年教师共同签署帮扶协议书,送系部盖章(系部有)
资料2:指导老师撰写帮扶计划和青年教师撰写被帮扶计划资料3:上交3份帮扶记录表(系部有)
资料4:指导老师至少听青年教师2次课,并提供听课记录为佐证资料
资料5:青年教师至少听指导老师1次课,并提供听课记录为佐证资料
资料6:指导老师至少指导青年教师2次教案,在上面书写亮点、修改建议等内容并签名,后期作为帮扶的佐证过程性资料
资料7:指导老师撰写帮扶总结和青年教师撰写被帮扶总结
温馨提示:帮扶指导时间为一个学期,电子版排版按照申示资料要求,请大家按照相关要求收集资料
信息商贸服装部
2020年5月14日。
现金交接表模板
现金交接表模板1. 概述现金交接表是用于记录现金交接过程中涉及的金额和相关信息的一种表格形式。
它可以用于各种场景,如企业内部部门之间的现金交接、商家与顾客之间的现金收付等。
本文将介绍一个现金交接表的模板,包括表格的组成要素、填写示例和注意事项。
2. 表格组成要素现金交接表通常由以下几个主要的组成要素构成:2.1 交接人员信息•交接人员姓名:填写交接人员的姓名。
•交接人员职务:填写交接人员的具体职务或岗位。
•交接日期:填写交接操作发生的具体日期。
•交接时间:填写交接操作发生的具体时间。
2.2 交接现金金额•上交现金金额:填写交接操作中由交接人员向接收人员上交的现金金额。
•领取现金金额:填写交接操作中由接收人员向交接人员领取的现金金额。
•盈余/亏空金额:填写交接操作中发生的盈余或亏空金额。
•盈余/亏空说明:对盈余或亏空金额的发生原因进行简要说明。
2.3 备注•备注:用于填写其他需要记录的信息或补充说明。
3. 填写示例下面是一个现金交接表的填写示例:交接人员姓名交接人员职务交接日期交接时间上交现金金额领取现金金额盈余/亏空金额盈余/亏空说明备注张三出纳2022/1/1 9:00 10000 0 02022/1/1 9:05 0 5000 0李四销售经理王五店长2022/1/1 9:10 0 0 500 盘点差异赵六出纳2022/1/1 9:15 0 5000 02022/1/1 9:20 20000 0 0小明收银员小红出纳2022/1/1 9:25 0 10000 04. 注意事项在填写现金交接表时,需要注意以下几个事项:•确保填写的人员信息准确无误,特别是姓名和职务。
•注意填写日期和时间,确保准确记录交接操作发生的具体时间点。
•上交现金金额和领取现金金额需要填写实际金额,并确保总金额一致。
•盈余/亏空金额需要填写实际发生的金额,并在盈余/亏空说明中简要说明原因。
•备注栏可以用于记录其他需要记录的信息或者进行补充说明。
销售部现金上交制度模板
销售部现金上交制度一、目的为了加强公司财务管理,规范销售部现金上交行为,确保公司资金的安全、及时和完整,根据《中华人民共和国会计法》及相关部门规定,特制定本制度。
二、适用范围本制度适用于公司销售部所有现金收支业务。
三、现金上交原则1. 及时性:销售人员应在每日业务结束后,将所收取的现金送交财务部门。
2. 完整性:销售人员应确保收取的现金与销售合同、发票等凭证相符,不得遗漏。
3. 安全性:销售人员应采取措施确保现金在运输、存放过程中的安全,防止丢失、损坏或被盗。
4. 合法性:销售人员应遵守国家相关法律法规,不得收取非法现金。
四、现金上交流程1. 销售人员在与客户结算时,应向客户收取现金。
2. 销售人员应及时将收取的现金送交财务部门,同时提供销售合同、发票等凭证。
3. 财务部门应在收到现金后,对现金进行清点、核对。
4. 财务部门将核对无误的现金存入公司银行账户。
5. 财务部门应定期将现金上交情况向销售部进行反馈。
五、责任与考核1. 销售人员应按照本制度规定及时上交现金,如有逾期未上交的,应承担相应的责任。
2. 销售人员应确保收取的现金合法、合规,如有收取非法现金的,应承担相应的法律责任。
3. 财务部门应加强对现金上交情况的监督检查,如发现违规行为的,应及时纠正并追究相关责任。
4. 公司将对销售人员现金上交情况进行定期考核,对表现优秀的给予奖励,对表现不佳的给予处罚。
六、其他规定1. 销售部应配备必要的保险柜、保险箱等安全设施,确保现金在存放、运输过程中的安全。
2. 销售人员应定期参加财务管理培训,提高财务管理意识,熟悉并遵守本制度。
3. 本制度如有未尽事宜,可根据实际情况予以补充。
4. 本制度自颁布之日起实施,如有与国家法律法规冲突的,以国家法律法规为准。
七、附则本制度由公司销售部负责解释,如有争议,公司将予以调解。
(此为模板,具体内容可根据公司实际情况进行调整和完善。
)。
上交安泰推荐信模板
[推荐人职务/头衔][推荐人所在单位/机构][推荐人联系信息:电话、邮箱等][收件人姓名][收件人职务/头衔]上海交通大学安泰经济与管理学院MBA招生办公室[学院地址][日期]尊敬的招生委员会:在此,我非常荣幸地向贵学院推荐[申请人姓名],他/她申请贵院的MBA项目。
作为[申请人姓名]在[推荐人与申请人关系,例如:[公司名称]、[职位名称]期间的直接上级/导师/同事,我深知[申请人姓名]的专业能力、个人品质和未来潜力,以下是我的推荐内容:一、与申请人的相识与了解我与[申请人姓名]相识于[具体时间],在[具体场合,例如:工作、学习、项目合作等]中与他/她共事/学习/合作。
在此期间,我们保持了良好的沟通与合作关系。
我对他/她的专业能力和个人品质有了深入的了解。
二、申请人的专业能力与业绩[申请人姓名]在[具体时间段]担任[职位名称],期间,他/她展现了卓越的专业能力和突出的业绩。
以下是一些具体事例:1. [具体事例1]:在[具体项目/任务]中,[申请人姓名]发挥了关键作用,成功实现了[具体目标],为公司创造了[具体效益]。
2. [具体事例2]:[申请人姓名]在[具体领域]方面具有丰富的经验,曾为[具体客户/合作伙伴]提供[具体服务],获得了高度评价。
3. [具体事例3]:[申请人姓名]在[具体比赛/评选]中获得了[具体奖项],充分展现了其专业素养和创新能力。
三、申请人的个人品质与潜力[申请人姓名]不仅具备出色的专业能力,还拥有以下优秀品质:1. 责任心强:[申请人姓名]在工作中始终以高度的责任心对待每一项任务,确保工作质量。
2. 团队合作:[申请人姓名]善于与他人协作,具备良好的沟通能力和组织协调能力。
3. 学习能力:[申请人姓名]具备较强的学习能力,能够迅速适应新环境和新任务。
4. 潜力巨大:[申请人姓名]具有很高的职业素养和发展潜力,相信他/她能够胜任贵院MBA项目的学习,并在未来取得更大的成就。
上交硕士生补助申请书模板
尊敬的XX大学研究生资助管理中心:您好!我是XX大学XX学院XX专业的硕士研究生XX,学号:XXXXXXXXXXX。
在此,我谨向学校申请硕士研究生的补助,希望能够得到学校的资助。
以下是我的申请理由和具体情况:一、家庭经济状况我出生在一个普通的农村家庭,父母靠种植几亩薄地维持家庭生计。
在我上大学期间,家庭经济状况一直比较困难,靠助学贷款和兼职工作来支持我的学业。
如今,我已经成为一名硕士研究生,虽然学业成绩优秀,但是家庭经济状况依然没有得到改善,每年需要支付的学费、生活费等开支让家庭负担沉重。
二、学习科研情况自从成为硕士研究生以来,我始终保持着对知识的渴望和追求。
在导师的指导下,我认真开展课题研究,努力提高自己的科研能力。
在学习科研过程中,我积极参加各类学术活动,撰写学术论文,并在国内外期刊上发表。
同时,我还积极参与实验室的日常工作,为实验室的发展做出了自己的贡献。
三、申请补助的原因1. 缓解家庭经济压力:作为一名农村家庭出来的学生,我深知家庭的经济困境。
补助金的发放能够减轻家庭负担,让我能够更加专注于学业,不必为生活费用担忧。
2. 提高生活质量:补助金可以改善我的生活条件,使我能够更好地投入到学习和科研中,提高自己的综合素质,为将来的职业发展打下坚实基础。
3. 回报社会:在得到学校补助的同时,我将会更加努力地学习,争取早日为国家和社会做出贡献,以实际行动回报母校的栽培之恩。
四、申请补助的承诺如果能够获得学校的补助,我将:1. 更加努力地学习,争取取得更好的成绩,为学校争光。
2. 积极参与社会实践活动,锻炼自己的综合素质,为将来的就业做好准备。
3. 始终保持一颗感恩的心,珍惜学校的资助,用实际行动回报社会。
最后,请学校领导对我的申请给予审批,给予我这个来之不易的机会。
我将铭记学校的关爱,为实现自己的人生目标而努力奋斗!此致敬礼!申请人:XX性别:XX民族:XX出生日期:XX联系方式:XX所在学院:XX专业:XX年级:XX班级:XX学号:XXXXXXXXXXX申请时间:XX年XX月XX日。
上海证券交易所 xbrl 模板
上海证券交易所 xbrl 模板上海证券交易所(上交所)是中国最大的证券交易所之一,也是中国重要的金融市场之一。
为了提高信息披露的透明度和准确性,上交所引入了XBRL(eXtensible Business Reporting Language)模板,以便上市公司更方便地提交财务信息。
XBRL是一种面向企业财务报告的XML(可扩展标记语言)标准。
它使用标签来标识财务报告信息中的各个项,并提供了一种结构化和可读性很强的方式来存储和传输财务数据。
上交所的XBRL模板旨在帮助上市公司提供规范化的财务报告,提高信息的可比性和分析的效率。
上交所的XBRL模板可以从其官方网站上下载,上市公司可以根据自身需要进行定制。
模板中包含了各类财务报告的标准化要求,包括资产负债表、利润表、现金流量表等。
上市公司只需按照模板的要求填写相关数据,然后将其保存为符合XBRL格式的文件,就可以通过网络提交给上交所。
使用XBRL模板的好处之一是减少了信息录入错误的可能性。
模板中的标签和公式已经预先定义好,上市公司只需选择合适的标签并填入相应数据即可,避免了手工输入可能引发的错误。
同时,上交所的系统还会对提交的XBRL文件进行校验,发现错误或缺漏的内容会提示上市公司进行修正。
另一个好处是方便了监管部门对财务信息进行分析和比对。
由于财务数据都是通过标签存储的,监管部门可以使用标签来对不同上市公司之间的财务指标进行比较。
这不仅提高了上市公司信息的可比性,也方便了监管部门的工作。
然而,XBRL模板也存在一些挑战和问题。
首先,模板使用了特定的标签和格式,需要上市公司进行培训和学习,以确保正确填写财务数据。
这对于一些小型公司来说可能增加了负担。
其次,使用XBRL模板需要投入相应的信息技术资源,包括软件和人员。
对于一些资源有限的公司来说,可能需要额外的投资和支出。
总的来说,上海证券交易所的XBRL模板在促进信息透明度和准确性方面具有重要意义。
通过采用标准化的财务报告格式,上交所提高了上市公司信息披露的质量和效率。
上交保研申请书模板范文
尊敬的导师/招生委员会:您好!我是XXX,现在就读于XX大学XX专业,很荣幸有机会向您提交我的保研申请书。
在本科阶段,我一直保持优秀的学术成绩和积极的研究态度,为了更好地发展自己的专业能力,我希望能够获得贵校的保研资格,继续深造。
首先,我想介绍一下我的学术背景和研究兴趣。
在本科期间,我认真学习了XX专业的核心课程,并取得了优异的成绩。
通过课堂学习和自主研究,我对XX领域的理论和实践有了更深入的了解。
同时,我也积极参与了各类学术活动,如学术论坛和研讨会,与同行们交流学术观点,不断提升自己的学术素养。
我发现XX领域的科研工作非常有趣,也具有广泛的应用前景。
因此,我希望能够继续深入研究,为该领域的发展做出自己的贡献。
除了学术成绩优秀外,我还积极参加各类实践活动和社会服务。
在实践中,我曾担任XX社团的负责人,组织了多次活动,锻炼了我的组织能力和团队合作精神。
同时,我也参与了XX公益项目,为社区做出了实际贡献。
这些经历让我更加明白团队合作和领导能力的重要性,也增强了我解决复杂问题的能力。
我相信这些实践经验将对我在研究生阶段的学习和研究中起到积极的推动作用。
选择贵校作为我的保研目的地,是因为贵校在XX领域的研究实力和学术声誉都非常突出。
我了解到贵校的XX实验室在XX领域取得了一系列的重要成果,并且拥有一支优秀的科研团队。
我相信在这样的学术环境中,我将得到更好的指导和培养,进一步发展自己的专业能力。
同时,我也了解到贵校注重跨学科的合作和学术交流,我相信这将给我提供更多机会与其他领域的专家交流思想,拓宽我的研究视野。
在研究生阶段,我计划专注于XX领域的研究,并希望能够参与贵校的XX研究项目。
我相信通过参与这个项目,我可以深入研究XX问题,并提出创新的解决方案。
同时,我也计划通过阅读大量的文献和参与学术讨论,不断丰富自己的理论知识和研究方法。
此外,我还希望能够与导师和同学们建立良好的合作关系,共同推动科研工作的发展。
上交所制定交易协议书模板5篇
上交所制定交易协议书模板5篇第1篇示例:上交所制定交易协议书模板第一条交易双方甲方:(委托方)___________;乙方:(中介机构或交易所)上海证券交易所;甲方授权乙方按照约定条件在上交所进行证券交易,并进行相关操作。
2. 甲方委托乙方进行的交易应当符合上交所的相关规定,且甲方需支付相应的交易手续费。
3. 乙方在接受委托后应当及时进行交易,并将交易情况及时告知甲方。
2. 乙方接受委托进行交易时,也可以按照规定向甲方收取相应的服务费用。
1. 甲方在委托乙方进行交易时应当认真审查相关风险披露文件,了解可能存在的风险,并自行承担交易风险。
1. 甲方委托乙方通过上交所固定的交易方式进行证券买卖交易,如需变更交易方式应当另行约定。
第七条协议生效本协议自双方签署之日起生效,至乙方完成委托交易为止。
第八条争议解决本协议在履行中如发生任何争议,双方应友好协商解决;协商不成的,可以根据中华人民共和国有关法律规定解决。
第九条附则1. 本协议一式两份,甲、乙双方各持一份,具有同等效力。
2. 本协议未尽事宜,由双方协商解决。
乙方:(签字或盖章)_________ 日期:_________第2篇示例:上交所制定交易协议书第一条緣起: 為了規范和保障投資者的交易權益,維護市場秩序,維護公平、公正、公開的證券交易環境,上海證券交易所(以下簡稱“上交所”)特制訂本協議。
第二条範圍:本協議適用於上交所的所有證券市場交易活動,含個人投資者、機構投資者、證券公司等交易參與者。
第三条遵紀守法:所有交易參與者在參與證券市場交易活動時,須遵守中國證券法、證券交易所和交易監管部門的相關規定。
第四条保證公開:所有證券市場交易活動均應公開透明,不得進行內幕交易、操縱市場等不當行為。
第五条交易資訊保密:所有交易參與者應嚴格保護交易資訊的保密性,不得泄露他人交易資訊。
第六条風險提示:證券市場投資存在一定風險,投資者應對風險有清醒的認識,自擔投資風險。
上交学费代偿协议书模板
上交学费代偿协议书模板甲方(代偿方):________________________地址:__________________________________电话:__________________________________法定代表人(或授权代表):________________乙方(学生方):________________________地址:__________________________________电话:__________________________________身份证号码:__________________________鉴于:1. 乙方为在校大学生/研究生,需要支付学费以完成学业。
2. 甲方愿意为乙方提供学费代偿服务,以支持乙方的教育事业。
3. 双方本着平等自愿、诚实信用的原则,经协商一致,达成如下协议。
第一条代偿金额甲方同意代乙方支付学费共计人民币(大写)______________________(¥______________________),用于乙方在______________________(学校名称)的学费支付。
第二条代偿条件1. 乙方应保证其在______________________(学校名称)的学籍状态为在读,并已获得该学校正式录取。
2. 乙方应保证其在校期间遵守学校规章制度,无违法违纪行为。
3. 乙方应保证其在毕业后按照本协议约定履行代偿义务。
第三条代偿方式1. 甲方将在乙方提供相应证明材料后,将代偿款项直接支付至______________________(学校名称)指定账户。
2. 乙方应于每年______________________(日期)前向甲方提供下一学年的学费支付通知及相关证明材料。
第四条代偿期限甲方代偿的学费款项,乙方应在毕业后______________________(年数)内分期偿还完毕。
具体偿还计划如下:1. 第一期偿还:毕业后第______________________个月,偿还金额为人民币(大写)______________________(¥______________________)。
延迟上交申请书模板范文
尊敬的XX部门领导:您好!我是XX公司的XX,在此特向您提出延迟上交XX项目的申请。
首先,我谨代表公司对您一直以来对我们工作的关心和支持表示衷心的感谢。
鉴于当前项目的进展情况和实际需求,我们希望能够将原定于XX月XX日提交的XX项目报告延迟至XX月XX日。
我们深知这一决定可能会给您的工作带来一定的困扰,但请您相信,我们此举并非无故拖延,而是基于以下原因:一、项目进度实际情况:自项目启动以来,我们团队成员全力以赴,严格按照项目计划推进。
然而,在项目执行过程中,我们遇到了一些意想不到的困难和挑战,如技术难题、人员调整等,导致项目进度受到了一定影响。
为确保项目质量,我们需要额外花费一定时间进行优化和完善。
二、确保项目质量:我们深知项目质量的重要性,为确保报告的准确性和完整性,我们需要对项目数据进行进一步的核实和分析。
此外,我们还将增加一些有利于项目评估的附加内容,以使报告更加符合实际需求。
三、协调各方资源:在项目执行过程中,我们正在与多方合作伙伴进行紧密沟通,以解决项目中出现的问题。
我们希望利用延迟上交的时间,进一步协调各方资源,为项目的顺利推进提供更有力的保障。
四、充分准备答辩:为确保项目答辩的顺利进行,我们需要利用延迟上交的时间,对项目报告进行细致的梳理和准备。
我们将在答辩前向您提交一份完整的报告,并确保答辩过程中的各项准备工作万无一失。
为了表示我们对此次延迟上交的诚意,我们承诺在延迟期间,积极加快项目进度,确保按时提交报告。
同时,我们将定期向您汇报项目进展情况,以便您了解我们的工作动态。
我们深知此次延迟上交可能会给您和您的团队带来不便,但请您相信,我们并非无故拖延,而是出于对项目质量和进度的考虑。
我们衷心希望您能理解并支持我们的决定,给予我们一定的宽容和谅解。
最后,再次感谢您在百忙之中抽出时间阅读我们的申请。
我们期待您的回复,并承诺在未来的工作中,继续严格按照要求,确保项目顺利进行。
此致敬礼!申请人:XX单位:XX公司职务:XX联系方式:XX日期:XX年XX月XX日。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
Standard Code LibraryHao YuanDepartment of Computer Science and Engineering Shanghai Jiaotong UniversityOctober23,2003Contents1Algorithms and Datastructures31.1High Precision in C (3)1.2High Precision in C Plus Plus (4)1.3High Precision Floating-point Number (6)1.4Fraction Class (8)1.5Binary Heap (8)1.6Winner Tree (9)1.7Digital Tree (10)1.8Segment Tree (10)1.9Segment Tree in IOI’2001 (11)1.10Union-Find Set (11)1.11Quick Sort (11)1.12Merge Sort (12)1.13Radix Sort (12)1.14Select K th Smallest Element (12)1.15KMP (12)1.16Suffix Sort (13)2Graph Theory and Network Algorithms142.1SSSP—Dijkstra+Binary Heap (14)2.2SSSP—Bellman Ford+Queue (15)2.3MST—Kruskal (15)2.4Minimum Directed Spanning Tree (16)2.5Maximum Matching on Bipartite Graph (16)2.6Maximum Cost Perfect Matching on Bipartite Graph (17)2.7Maximum Matching on General Graph (17)2.8Maximum Flow—Ford Fulkson in Matrix (18)2.9Maximum Flow—Ford Fulkson in Link (19)2.10Minimum Cost Maximum Flow in Matrix (20)2.11Minimum Cost Maximum Flow in Link (21)2.12Recognizing Chordal Graph (21)2.13DFS—Bridge (22)2.14DFS—Cutvertex (22)2.15DFS—Block (23)2.16DFS—Topological Sort (24)2.17Strongly Connected Component (24)3Number Theory253.1Greatest Common Divisor (25)3.2Chinese Remainder Theorem (25)3.3Prime Generator (26)3.4φGenerator (26)3.5Discrete Logarithm (27)3.6Square Roots in Z p (28)4Algebraic Algorithms294.1Linear Equations in Z2 (29)4.2Linear Equations in Z (30)4.3Linear Equations in Q (30)4.4Linear Equations in R (31)4.5Roots of Polynomial (31)14.6Roots of Cubic and Quartic (32)4.7Fast Fourier Transform (33)4.8FFT-Polynomial Multiplication (34)4.9FFT-Convolution (34)4.10FFT-Reverse Bits (34)4.11Linear Programming-Primal Simplex (36)5Computational Geometry385.1Basic Operations (38)5.2Extended Operations (39)5.3Convex Hull (41)5.4Point Set Diameter (43)5.5Closest Pair (44)5.6Circles (44)5.7Largest Empty Convex Polygon (46)5.8Triangle Centers (47)5.9Polyhedron Volume (48)5.10Planar Graph Contour (49)5.11Rectangles Area (50)5.12Rectangles Perimeter (52)5.13Smallest Enclosing Circle (54)5.14Smallest Enclosing Ball (55)6Classic Problems576.1Bernoulli Number Generator (57)6.2Baltic OI’99Expressions (58)6.3Bead Coloring—P´o lya Theory (58)6.4Binary Stirling Number (59)6.5Box Surface Distance (59)6.6Calculate Expression (59)6.7Cartesian Tree (60)6.8Catalan Number Generator (61)6.9Coloring Regular Polygon (62)6.10Counting Inverse Pairs (62)6.11Counting Trees (63)6.12Eight Puzzle Problem (63)6.13Extended Honai Tower (66)6.14High Precision Square Root (66)6.15Largest Empty Rectangle (67)6.16Last Non-Zero Digit of N! (69)6.17Least Common Ancestor (69)6.18Longest Common Substring (71)6.19Longest Non Descending Sub Sequence (73)6.20Join and Disjoin (73)6.21Magic Square (74)6.22Optimal Binary Search Tree (75)6.23Pack Rectangles—Cut Rectangles (75)6.24Pack Rectangles—O(N2) (76)6.25Parliament (76)6.26πGenerator (76)6.27Plant Trees—Iteration (77)6.28Plant Trees—Segment Tree (77)6.29Range Maximum Query (78)6.30Travelling Salesman Problem (79)6.31Tree Heights (80)6.32Minimum Cyclic Presentation (81)6.33Maximum Clique (82)6.34Maximal Non-Forbidden Submatrix (83)6.35Maximum Two Chain Problem (83)6.36N Queens Problem (85)6.37de Bruijn Sequence Generator (85)6.38ZOJ1482Partition (86)2while(c.s[i]){ c.s[i+1]=c.s[i]/10; c.s[i]%=10;i++;}while(i>1&&!c.s[i])i−−;c.l e n=i;return c;}HP HP::operator+(const HP&b){int i;HP c; c.s[1]=0;for(i=1;i<=l e n||i<=b.l e n|| c.s[i];i++){i f(i<=l e n) c.s[i]+=s[i];i f(i<=b.l e n) c.s[i]+=b.s[i];c.s[i+1]=c.s[i]/10; c.s[i]%=10;}c.l e n=i−1;i f( c.l e n==0)c.l e n=1;return c;}HP HP::operator−(const HP&b){int i,j;HP c;for(i=1,j=0;i<=l e n;i++){c.s[i]=s[i]−j;i f(i<=b.l e n) c.s[i]−=b.s[i];i f(c.s[i]<0){j=1;c.s[i]+=10;}else j=0;}c.l e n=l e n;while(c.len>1&&!c.s[c.l e n]) c.len−−;return c;}int HP::Compare(const HP&y){i f(len>y.l e n)return1;i f(len<y.l e n)return−1;int i=l e n;while((i>1)&&(s[i]==y.s[i]))i−−;return s[i]−y.s[i];}HP HP::operator/(const HP&b){int i,j;HP d(0),c;for(i=l e n;i>0;i−−){i f(!(d.l e n==1&&d.s[1]==0)){for(j=d.l e n;j>0;j−−)d.s[j+1]=d.s[j];++d.l e n;}d.s[1]=s[i];c.s[i]=0;while((j=pare(b))>=0){d=d−b;c.s[i]++;i f(j==0)break;}}c.l e n=l e n;while((c.len>1)&&(c.s[c.l e n]==0)) c.len−−;return c;}HP HP::operator%(const HP&b){int i,j;HP d(0);for(i=l e n;i>0;i−−){i f(!(d.l e n==1&&d.s[1]==0)){for(j=d.l e n;j>0;j−−)d.s[j+1]=d.s[j];++d.l e n;}d.s[1]=s[i];while((j=pare(b))>=0){d=d−b;i f(j==0)break;} }return d;}5Chapter1Algorithms and Datastructures1.1High Precision in C#define maxlen1000struct HP{int len,s[maxlen];};void PrintHP(HP x){for(int i=x.l e n;i>=1;i−−)cout<<x.s[i];}void Str2HP(const char∗s,HP&x){x.l e n=s t r l e n(s);for(int i=1;i<=x.l e n;i++)x.s[i]=s[x.len−i]−’0’;}void Int2HP(int i n t e,HP&x){i f(i n t e==0){x.l e n=1;x.s[1]=0;return;};for(x.l e n=0;i n t e>0;){x.s[++x.l e n]=i n t e%10;i n t e/=10;};}void Multi(const HP a,const HP b,HP&c){int i,j; c.l e n=a.l e n+b.l e n;for(i=1;i<=c.l e n;i++)c.s[i]=0;for(i=1;i<=a.l e n;i++)for(j=1;j<=b.l e n;j++)c.s[i+j−1]+=a.s[i]∗b.s[j];for(i=1;i<c.l e n;i++){ c.s[i+1]+=c.s[i]/10; c.s[i]%=10;}while(c.s[i]){ c.s[i+1]=c.s[i]/10; c.s[i]%=10;i++;}while(i>1&&!c.s[i])i−−;c.l e n=i;}void Plus(const HP a,const HP b,HP&c){int i; c.s[1]=0;for(i=1;i<=a.l e n||i<=b.l e n|| c.s[i];i++){i f(i<=a.l e n) c.s[i]+=a.s[i];i f(i<=b.l e n) c.s[i]+=b.s[i];c.s[i+1]=c.s[i]/10; c.s[i]%=10;}c.l e n=i−1;i f( c.l e n==0)c.l e n=1;}void Subtract(const HP a,const HP b,HP&c){for(int i=1,j=0;i<=a.l e n;i++){c.s[i]=a.s[i]−j;i f(i<=b.l e n) c.s[i]−=b.s[i];i f(c.s[i]<0){j=1;c.s[i]+=10;}else j=0;}3c.l e n=a.l e n;while(c.len>1&&!c.s[c.l e n]) c.len−−;}int HPCompare(const HP x,const HP y){i f(x.len>y.l e n)return1;i f(x.len<y.l e n)return−1;int i=x.l e n;while((i>1)&&(x.s[i]==y.s[i]))i−−;return x.s[i]−y.s[i];}void Divide(const HP a,const HP b,HP&c,HP&d){int i,j; d.l e n=1; d.s[1]=0;for(i=a.l e n;i>0;i−−){i f(!(d.l e n==1&&d.s[1]==0)){for(j=d.l e n;j>0;j−−)d.s[j+1]=d.s[j];++d.l e n;}d.s[1]=a.s[i];c.s[i]=0;while((j=HPCompare(d,b))>=0){Subtract(d,b,d);c.s[i]++;i f(j==0)break;} }c.l e n=a.l e n;while((c.len>1)&&(c.s[c.l e n]==0)) c.len−−;}1.2High Precision in C Plus Plusconst int maxlen=10000;class HP{public:int len,s[maxlen];HP(){(∗this)=0;};HP(int i n t e){(∗this)=i n t e;};HP(const char∗s t r){(∗this)=s t r;};friend ostream&operator<<(ostream&cout,const HP&x);HP operator=(int i n t e);HP operator=(const char∗s t r);HP operator∗(const HP&b);HP operator+(const HP&b);HP operator−(const HP&b);HP operator/(const HP&b);HP operator%(const HP&b);int Compare(const HP&b);};ostream&operator<<(ostream&cout,const HP&x){for(int i=x.l e n;i>=1;i−−)cout<<x.s[i];return cout;}HP HP::operator=(const char∗s t r){l e n=s t r l e n(s t r);for(int i=1;i<=l e n;i++)s[i]=s t r[len−i]−’0’;return∗this;}HP HP::operator=(int i n t e){i f(i n t e==0){l e n=1;s[1]=0;return(∗this);};for(l e n=0;i n t e>0;){s[++l e n]=i n t e%10;i n t e/=10;};return(∗this);}HP HP::operator∗(const HP&b){int i,j;HP c;c.l e n=l e n+b.l e n;for(i=1;i<=c.l e n;i++)c.s[i]=0;for(i=1;i<=l e n;i++)for(j=1;j<=b.l e n;j++)c.s[i+j−1]+=s[i]∗b.s[j];for(i=1;i<c.l e n;i++){ c.s[i+1]+=c.s[i]/10; c.s[i]%=10;}41.3High Precision Floating-point Numberconst int f p r e c=100;//f l o a t i n g−p o i n t p r e c i s i o nHP z e r o=0;class FS{public:FS();void SetZero();FS(int i n t e){(∗this)=i n t e;}FS(char∗s){(∗this)=s;}FS operator=(char∗s);FS operator=(int i n t e);FS operator+(FS b);FS operator−(FS b);FS operator∗(FS b);FS operator/(FS b);friend ostream&operator<<(ostream&cout,FS x);int sign,prec;HP num;};void FS::SetZero(){s i g n=1;num=0;prec=0;}FS::FS(){SetZero();}ostream&operator<<(ostream&cout,FS x){i f(x.sign<0)cout<<”−”;int i,k,low=1;for(i=x.num.l e n;i>x.prec;i−−)cout<<x.num.s[i];i f(x.num.len<=x.prec)cout<<”0”;i f(pare(z e r o)==0){cout<<”.0”;return cout;}k=i;while(k>0&&x.num.s[k]==0)k−−;i f(k==0){cout<<”.0”;return cout;}cout<<”.”;i f(x.num.len<x.prec)for(int j=0;j<x.prec−x.num.l e n;j++)cout<<”0”;while(x.num.s[low]==0)low++;while(i>=low)cout<<x.num.s[i−−];return cout;}FS FS::operator=(int i n t e){prec=0;i f(i n t e>=0){s i g n=1;num=i n t e;}else{s i g n=−1;num=−i n t e;}return(∗this);}FS FS::operator=(char∗s){int p,i,j,l;SetZero();i f(s[0]==’−’){s i g n=−1;s++;};i f(s[0]==’+’){s i g n=1;s++;};l=s t r l e n(s);for(p=0;p<l;p++)i f(s[p]==’.’)break;i f(p==l)prec=0;else prec=l−1−p;for(i=l−1,j=0;i>=0;i−−)i f(s[i]!=’.’)num.s[++j]=s[i]−’0’;while(j>1&&num.s[j]==0)−−j;num.l e n=j;return(∗this);}6void L S h i f t(FS&a,int s l){a.prec+=s l; a.num.l e n+=s l;int i;for(i=a.num.l e n;i>s l;i−−)a.num.s[i]=a.num.s[i−s l];while(i>0) a.num.s[i−−]=0;}void RShift(FS&a,int s l){a.prec−=s l; a.num.len−=s l;int i;for(i=1;i<=a.num.l e n;i++)a.num.s[i]=a.num.s[i+s l];}FS FS::operator+(FS b){FS c;i f(prec>b.prec)L S h i f t(b,prec−b.prec);elsei f(prec<b.prec)L S h i f t((∗this),b.prec−prec);i f(s i g n==b.s i g n){c.s i g n=s i g n; c.prec=prec; c.num=num+b.num;i f( pare(z e r o)==0) c.SetZero();}else{c.prec=prec;i f(pare(b.num)==0) c.SetZero();elsei f(pare(b.num)>0){ c.s i g n=s i g n; c.num=num−b.num;}elsei f(pare(b.num)<0){ c.s i g n=b.s i g n; c.num=b.num−num;}i f( pare(z e r o)==0) c.SetZero();}i f(c.prec>f p r e c)RShift(c,c.prec−f p r e c);return c;}FS FS::operator−(FS b){b.s i g n=−b.s i g n;FS c=(∗this)+b;b.s i g n=−b.s i g n;return c;}FS FS::operator∗(FS b){FS c;c.s i g n=s i g n∗ b.s i g n;c.prec=prec+ b.prec;c.num=num∗ b.num;i f(pare(z e r o)==0) c.SetZero();i f(c.prec>f p r e c)RShift(c,c.prec−f p r e c);return c;}FS FS::operator/(FS b)//355/133= 3.1415929203539823008849557522124{FS c,d;//c=d/bd=(∗this);L S h i f t(d,f p r e c);c.s i g n=d.s i g n∗ b.s i g n;c.prec=d.prec;L S h i f t(d, b.prec);c.num=d.num/ b.num;i f(c.prec>f p r e c)RShift(c,c.prec−f p r e c);return c;}71.4Fraction Classint gcd(int a,int b){i f(b==0)return a;return gcd(b,a%b);}int lcm(int a,int b){return a/gcd(a,b)∗b;}class F ra c t io n{public:int a,b;//(a/b=numerator/denominator)int s i g n(int x){return(x>0?1:−1);}F ra c t io n():a(0),b(1){}F ra c t io n(int x):a(x),b(1){}F ra c t io n(int x,int y){int m=gcd(abs(x),abs(y));a=x/m∗s i g n(y);i f(a==0)b=1;else b=abs(y/m);}int get denominator(){return b;}int get numerator(){return a;}F ra c t io n operator+(const F r a c t i o n&f){int m=gcd(b,f.b);return F ra c t io n(f.b/m∗a+b/m∗f.a,b/m∗f.b);}F r a c t i o n operator−(const F ra c t i o n&f){int m=gcd(b,f.b);return F ra c t io n(f.b/m∗a−b/m∗f.a,b/m∗f.b);}F r a c t i o n operator∗(const F r a c t i o n&f){int m1=gcd(abs(a),f.b);int m2=gcd(b,abs(f.a));return F r a c t i o n((a/m1)∗(f.a/m2),(b/m2)∗(f.b/m1));}F r a c t io n operator/(const F r a c t i o n&f){return(∗this)∗F ra c t i o n(f.b,f.a);}friend ostream&operator<<(ostream&out,const F r a c t io n&f){i f(f.a==0)cout<<0;elsei f(f.b==1)cout<<f.a;else cout<<f.a<<’/’<<f.b;return out;}};1.5Binary Heap#define M A X N1048576int n,HeapSize,Heap[M A X N+1];void HeapUp(int p){int q=p>>1,a=Heap[p];while(q){i f(a<Heap[q])Heap[p]=Heap[q];else break;p=q;q=p>>1;}Heap[p]=a;}void AddToHeap(int a){Heap[++HeapSize]=a;HeapUp(HeapSize);}8void HeapDown(int p){int q=p<<1,a=Heap[p];while(q<=HeapSize){i f(q<HeapSize&&Heap[q+1]<Heap[q])q++;i f(Heap[q]<a)Heap[p]=Heap[q];else break;p=q;q=p<<1;}Heap[p]=a;}int GetTopFromHeap(){int TopElement=Heap[1];Heap[1]=Heap[HeapSize−−];HeapDown(1);return TopElement;}void BuildHeap()//Remember t o Let HeapSize=N{for(int i=HeapSize;i>0;i−−)HeapDown(i);}1.6Winner Treeconst int i n f=10000000;const int maxsize=1048576;//2ˆf l o o r(l o g(n))int heap[maxsize∗2],pos[maxsize∗2],n,base;void Update(int i){int j=i<<1;i f(heap[j+1]<heap[j])j++;heap[i]=heap[j];pos[i]=pos[j];}int GetTopFromHeap(int&ps){int r e t=heap[1],p=pos[1];ps=p;heap[p]=i n f;while(p>1){p>>=1;Update(p);}return r e t;}int main(){int i,j;c i n>>n;for(base=1;base<n;base<<=1);base−−;for(i=base+1;i<=(base<<1)+1;i++){pos[i]=i;i f(i<=base+n)cin>>heap[i];else heap[i]=i n f;}for(i=base;i>0;i−−)Update(i);for(i=1;i<=n;i++)cout<<GetTopFromHeap(j)<<endl;return0;}91.7Digital Tree#define maxlen100#define maxsize1000000#define DataType intchar t r e e[maxsize],s[maxlen];int son[maxsize],bro[maxsize],num,k,n;DataType data[maxsize];DataType f i n d(const char∗s){int i,j=0;for(i=0;s[i];i++){j=son[j];while(j&&t r e e[j]!=s[i])j=bro[j];i f(!j)return−1;}return data[j];}void add(const char∗s,DataType x){int i,j=0,p;for(i=0;s[i];i++){p=j;j=son[j];while(j&&t r e e[j]!=s[i])j=bro[j];i f(!j){t r e e[++num]=s[i];son[num]=0;bro[num]=son[p];son[p]=num;data[num]=−1;j=num;}}data[j]=x;}void i n i t(){num=0;bro[num]=0;son[num]=0;data[0]=−1;}1.8Segment Treeint cc[1<<22],m,n;//memset cc f i r s tvoid update(int i i,int s,int t,int ss,int tt,bool i n s e r t){i f(ss>t t)return;int mid((s+t)/2);i f(s==s s&&t==t t){i f(i n s e r t)cc[i i]=t−s+1;else cc[i i]=0;return;}i f(cc[i i]==0)i f(!i n s e r t)return;else cc[i i∗2]=cc[i i∗2+1]=0;else i f(cc[i i]==t−s+1)i f(i n s e r t)return;else{cc[i i∗2]=mid−s+1;cc[i i∗2+1]=t−mid;}update(i i∗2,s,mid,ss,min(mid,t t),i n s e r t);update(i i∗2+1,mid+1,t,max(mid+1,s s),tt,i n s e r t);cc[i i]=cc[i i∗2]+cc[i i∗2+1];}int query(int i i,int s,int t,int ss,int t t){i f(ss>t t)return0;int mid((s+t)/2);i f(s==s s&&t==t t)return cc[i i];i f(cc[i i]==0)cc[i i∗2]=cc[i i∗2+1]=0;i f(cc[i i]==t−s+1){cc[i i∗2]=mid−s+1;cc[i i∗2+1]=t−mid;}return query(i i∗2,s,mid,ss,min(mid,t t))+query(i i∗2+1,mid+1,t,max(mid+1,s s),t t);1.9Segment Tree in IOI’2001//upper:maximum p o s s i b l e r i g h t p o i n t o f i n t e r v a l sint upper,t r e e[maxinterval+1];void i n i t(){upper=0;memset(t r e e,0,s i z e o f(t r e e));}void update(int r,int x)//sum[1..r]+=x{while(r<=upper){t r e e[r]+=x;r+=(r&(rˆ(r−1)));}}int sum(int r)//r e t u r n sum[1..r]{int r e s=0;while(r>0){r e s+=t r e e[r];r−=(r&(rˆ(r−1)));}return r e s;}1.10Union-Find Setint rank[maxn],pnt[maxn];void makeset(int x){rank[pnt[x]=x]=0;}int f i n d(int x){int px=x,i;while(px!=pnt[px])px=pnt[px];while(x!=px){i=pnt[x];pnt[x]=px;x=i;};return px;}void merge(int x,int y)//or j u s t pnt[f i n d(x)]=f i n d(y) {i f(rank[x=f i n d(x)]>rank[y=f i n d(y)])pnt[y]=x;else{pnt[x]=y;rank[y]+=(rank[x]==rank[y]);}; }1.11Quick Sortvoid q u i c k s o r t(int b,int e,int a[]){int i=b,j=e,x=a[(b+e)/2];do{while(a[i]<x)i++;while(a[j]>x)j−−;i f(i<=j)std::swap(a[i++],a[j−−]);}while(i<j);i f(i<e)q u i c k s o r t(i,e,a);i f(j>b)q u i c k s o r t(b,j,a);}1.12Merge Sortvoid s o r t(int b,int e){i f(e−b<=0)return;int mid=(b+e)/2,p1=b,p2=mid+1,i=b;s o r t(b,mid);s o r t(mid+1,e);while(p1<=mid||p2<=e)i f(p2>e||(p1<=mid&&a[p1]<=a[p2]))t[i++]=a[p1++];else t[i++]=a[p2++];for(i=b;i<=e;i++)a[i]=t[i];}1.13Radix Sort#define base(1<<16)int n,a[maxn],t[maxn],bucket[base+2];void RadixSort(int n,int a[],int t[],int bucket[]){int k,i,j;for(j=0;j<base;j++)bucket[j]=0;for(k=base−1,i=0;i<2;i++,k<<=16){for(j=0;j<n;j++)bucket[a[j]&k]++;for(j=1;j<base;j++)bucket[j]+=bucket[j−1];for(j=n−1;j>=0;j−−)t[−−bucket[a[j]&k]]=a[j];for(j=0;j<n;j++)a[j]=t[j];}}1.14Select K th Smallest Elementint s e l e c t(int∗a,int b,int e,int k){i f(b==e)return a[b];int x=a[b+rand()%(e−b+1)],i=b,j=e;i−−;j++;while(i<j){while(a[++i]<x);while(a[−−j]>x);i f(i<j)std::swap(a[i],a[j]);}i f(j==e)j−−;i=j−b+1;i f(k<=i)return s e l e c t(a,b,j,k);else return s e l e c t(a,j+1,e,k−i);}1.15KMPint f a i l[maxlen];void m a k e f a i l(char∗t,int l t){−−t;for(int i=1,j=0;i<=l t;i++,j++){f a i l[i]=j;while(j>0&&t[i]!=t[j])j=f a i l[j];}}//s t a r t matching p a t t e r n T in S[i..)int kmp(char∗s,int l s,char∗t,int l t,int i,int&l o n g e s t,int&l p) {l o n g e s t=l p=0;−−s;−−t;for(int j=1;i<=l s;i++,j++){while(j>0&&s[i]!=t[j])j=f a i l[j];i f(j>l o n g e s t){l o n g e s t=j;l p=i−j;}i f(j==l t)return i−l t;}return−1;}1.16Suffix SortSuffixSort:input s[0..n),output id[0..n)#define nb next//”new b u c k e t”o v e r l a i d on”next”#define head h e i g h t//head i s never used when computing h e i g h t#define rank b//a f t e r S u f f i x S o r t,”rank”o v e r l a i d on”b u c k e t”char s[maxn];int n,i d[maxn],h e i g h t[maxn],b[maxn],next[maxn];bool cmp(const int&i,const int&j){return s[i]<s[j];}void S u f f i x S o r t(){int i,j,k,h;for(i=0;i<n;i++)i d[i]=i;std::s o r t(id,i d+n,cmp);for(i=0;i<n;i++)i f(i==0||s[i d[i]]!=s[i d[i−1]])b[i d[i]]=i;else b[i d[i]]=b[i d[i−1]];for(h=1;h<n;h<<=1){for(i=0;i<n;i++)head[i]=next[i]=−1;for(i=n−1;i>=0;i−−)i f(i d[i]){j=i d[i]−h;i f(j<0)j+=n;next[j]=head[b[j]];head[b[j]]=j;}j=n−h;next[j]=head[b[j]];head[b[j]]=j;for(i=k=0;i<n;i++)i f(head[i]>=0)for(j=head[i];j>=0;j=next[j])i d[k++]=j;for(i=0;i<n;i++)i f(i>0&&i d[i]+h<n&&i d[i−1]+h<n&&b[i d[i]]==b[i d[i−1]]&&b[i d[i]+h]==b[i d[i−1]+h])nb[i d[i]]=nb[i d[i−1]];else nb[i d[i]]=i;for(i=0;i<n;i++)b[i]=nb[i];}}GetHeight:height[i]=LCP(s[id[i]],s[id[i]−1]void GetHeight(){int i,j,h;h e i g h t[0]=0;for(i=0;i<n;i++)rank[i d[i]]=i;for(h=0,i=0;i<n;i++)i f(rank[i]>0){j=i d[rank[i]−1];while(s[i+h]==s[j+h])++h;h e i g h t[rank[i]]=h;i f(h>0)−−h;}Chapter2Graph Theory and Network Algorithms2.1SSSP—Dijkstra+Binary Heapconst int i n f=1000000000;int n,m,num,len,next[maxm],ev[maxm],ew[maxm];int value[maxn],mk[maxn],nbs[maxn],ps[maxn],heap[maxn];void update(int r){int q=ps[r],p=q>>1;while(p&&value[heap[p]]>value[r]){ps[heap[p]]=q;heap[q]=heap[p];q=p;p=q>>1;}heap[q]=r;ps[r]=q;}int getmin(){int r e t=heap[1],p=1,q=2,r=heap[len−−];while(q<=l e n){i f(q<l e n&&value[heap[q+1]]<value[heap[q]])q++;i f(value[heap[q]]<value[r]){ps[heap[q]]=p;heap[p]=heap[q];p=q;q=p<<1;}else break;}heap[p]=r;ps[r]=p;return r e t;}void d i j k s t r a(int src,int dst){int i,j,u,v;for(i=1;i<=n;i++){value[i]=i n f;mk[i]=ps[i]=0;};value[s r c]=0;heap[l e n=1]=s r c;ps[s r c]=1;while(!mk[dst]){i f(l e n==0)return;u=getmin();mk[u]=1;for(j=nbs[u];j;j=next[j]){v=ev[j];i f(!mk[v]&&value[u]+ew[j]<value[v]){i f(ps[v]==0){heap[++l e n]=v;ps[v]=l e n;}value[v]=value[u]+ew[j];update(v);}}}void readdata(){int i,u,v,w;cin>>n>>m;num=0;for(i=1;i<=n;i++)nbs[i]=0;while(m−−){cin>>u>>v>>w;next[++num]=nbs[u];nbs[u]=num;ev[num]=v;ew[num]=w;}d i j k s t r a(1,n);//Minimum Distance saved at v a l u e[1..n]}2.2SSSP—Bellman Ford+Queueconst int maxn=maxm=1000005const int i n f=1000000000int nbs[maxn],next[maxm],value[maxn],open[maxn],open1[maxn];int ev[maxm],ew[maxm],mk[maxn],n,m,num,cur,t a i l;void BellmanFord(int s r c){int i,j,k,l,t,u,v,p=0;for(i=1;i<=n;i++){value[i]=i n f;mk[i]=0;}value[s r c]=t a i l=0;open[0]=s r c;while(++p,t a i l>=0){for(i=0;i<=t a i l;i++)open1[i]=open[i];for(cur=0,t=t a i l,t a i l=−1;cur<=t;cur++)for(u=open1[cur],i=nbs[u];i;i=next[i]){v=ev[i];i f(value[u]+ew[i]<value[v]){value[v]=value[u]+ew[i];i f(mk[v]!=p){open[++t a i l]=v;mk[v]=p;}}}}}2.3MST—Kruskal#define maxn1000005#define maxm1000005int i d[maxm],eu[maxm],ev[maxm],ew[maxm],n,m,pnt[maxn];int cmp(const int&i,const int&j){return ew[i]<ew[j];}int f i n d(int x){i f(x!=pnt[x])pnt[x]=f i n d(pnt[x]);return pnt[x];} int Kruskal(){int r e t=0,i,j,p;for(i=1;i<=n;i++)pnt[i]=i;//node[1..n]for(i=0;i<m;i++)i d[i]=i;//ew[0..m−1]std::s o r t(id,i d+m,cmp);for(j=−1,i=1;i<n;i++){while(p=i d[++j],f i n d(eu[p])==f i n d(ev[p]));r e t+=ew[p];pnt[f i n d(ev[p])]=f i n d(eu[p]);}return r e t;}2.4Minimum Directed Spanning Treeint n,g[maxn][maxn],used[maxn],pass[maxn],eg[maxn],more,queue[maxn];void combine(int id,int&sum){int t o t=0,from,i,j,k;for(;i d!=0&&!pass[i d];i d=eg[i d]){queue[t o t++]=i d;pass[i d]=1;}for(from=0;from<t o t&&queue[from]!=i d;from++);i f(from==t o t)return;more=1;for(i=from;i<t o t;i++){sum+=g[eg[queue[i]]][queue[i]];i f(i!=from){used[queue[i]]=1;for(j=1;j<=n;j++)i f(!used[j])i f(g[queue[i]][j]<g[i d][j])g[i d][j]=g[queue[i]][j];}}for(i=1;i<=n;i++)i f(!used[i]&&i!=i d){for(j=from;j<t o t;j++){k=queue[j];i f(g[i][i d]>g[i][k]−g[eg[k]][k])g[i][i d]=g[i][k]−g[eg[k]][k];}}}int msdt(int r o o t){//r e t u r n t h e t o t a l l e n g t h o f MDSTint i,j,k,sum=0;memset(used,0,s i z e o f(used));for(more=1;more;){more=0;memset(eg,0,s i z e o f(eg));for(i=1;i<=n;i++)i f(!used[i]&&i!=r o o t){for(j=1,k=0;j<=n;j++)i f(!used[j]&&i!=j)i f(k==0||g[j][i]<g[k][i])k=j;eg[i]=k;}memset(pass,0,s i z e o f(pass));for(i=1;i<=n;i++)i f(!used[i]&&!pass[i]&&i!=r o o t)combine(i,sum);}for(i=1;i<=n;i++)i f(!used[i]&&i!=r o o t)sum+=g[eg[i]][i];return sum;}2.5Maximum Matching on Bipartite Graphint nx,ny,m,g[M A X N][M A X N],sy[M A X N],cx[M A X N],cy[M A X N];int path(int u){for(int v=1;v<=ny;v++)i f(g[u][v]&&!sy[v]){sy[v]=1;i f(!cy[v]||path(cy[v])){cx[u]=v;cy[v]=u;return1;}}return0;}int MaximumMatch(){int i,r e t=0;memset(cx,0,s i z e o f(cx));memset(cy,0,s i z e o f(cy));for(i=1;i<=nx;i++)i f(!cx[i]){memset(sy,0,s i z e o f(sy));r e t+=path(i);} return r e t;}2.6Maximum Cost Perfect Matching on Bipartite Graphint cx[maxn],cy[maxn],sx[maxn],sy[maxn],l x[maxn],l y[maxn];int nx,ny,match,g[maxn][maxn];int path(int u){sx[u]=1;for(int v=1;v<=ny;v++)i f(g[u][v]==l x[u]+l y[v]&&!sy[v]){ sy[v]=1;i f(!cy[v]||path(cy[v])){cx[u]=v;cy[v]=u;return1;}}return0;}void KuhnMunkres(){int i,j,u,min;memset(lx,0,s i z e o f(l x));memset(ly,0,s i z e o f(l y));memset(cx,0,s i z e o f(cx));memset(cy,0,s i z e o f(cy));for(i=1;i<=nx;i++)for(j=1;j<=ny;j++)i f(l x[i]<g[i][j])l x[i]=g[i][j];for(match=0,u=1;u<=nx;u++)i f(!cx[u]){memset(sx,0,s i z e o f(sx));memset(sy,0,s i z e o f(sy));while(!path(u)){min=0x3f f f f f f f;for(i=1;i<=nx;i++)i f(sx[i])for(j=1;j<=ny;j++)i f(!sy[j])i f(l x[i]+l y[j]−g[i][j]<min)min=l x[i]+l y[j]−g[i][j];for(i=1;i<=nx;i++)i f(sx[i]){l x[i]−=min;sx[i]=0;}for(j=1;j<=ny;j++)i f(sy[j]){l y[j]+=min;sy[j]=0;} };}}2.7Maximum Matching on General Graph//t o t a l i s t h e maximum c a r d i n a l i t y,p[1..n]means a match:i<−>p[i]int g[maxn][maxn],p[maxn],l[maxn][3],n,t o t a l,s t a t u s[maxn],v i s i t e d[maxn]; void s o l v e(){int i,j,k,pass;memset(p,0,s i z e o f(p));do{i=0;do{i f(p[++i])pass=0;else{memset(l,0,s i z e o f(l));l[i][2]=0x f f;pass=path(i);for(j=1;j<=n;j++)for(k=1;k<=n;k++)i f(g[j][k]<0)g[j][k]=−g[j][k];};}while(i!=n&&!pass);i f(pass)t o t a l+=2;}while(i!=n&&t o t a l!=n);}void upgrade(int r){int j=r,i=l[r][1];for(p[i]=j;l[i][2]<0x f f;){p[j]=i;j=l[i][2];i=l[j][1];p[i]=j;}p[j]=i;}int path(int r){int i,j,k,v,t,q u i t;memset(s t a t u s,0,s i z e o f(s t a t u s));s t a t u s[r]=2;do{q u i t=1;for(i=1;i<=n;i++)i f(s t a t u s[i]>1)for(j=1;j<=n;j++)i f(g[i][j]>0&&p[j]!=i)i f(s t a t u s[j]==0){i f(p[j]==0){l[j][1]=i;upgrade(j);return1;}elsei f(p[j]>0){g[i][j]=g[j][i]=−1;s t a t u s[j]=1;l[j][1]=i;g[j][p[j]]=g[p[j]][j]=−1;l[p[j]][2]=j;s t a t u s[p[j]]=2;q u i t=0;}}elsei f(s t a t u s[j]>1&&(s t a t u s[i]+s t a t u s[j]<6)){q u i t=0;g[i][j]=g[j][i]=−1;memset(v i s i t e d,0,s i z e o f(v i s i t e d));v i s i t e d[i]=1;k=i;v=2;while(l[k][v]!=0x f f){k=l[k][v];v=3−v;v i s i t e d[k]=1;}k=j;v=2;while(!v i s i t e d[k]){k=l[k][v];v=3−v;}i f(s t a t u s[i]!=3)l[i][1]=j;i f(s t a t u s[j]!=3)l[j][1]=i;s t a t u s[i]=s t a t u s[j]=3;t=i;v=2;while(t!=k){i f(s t a t u s[l[t][v]]!=3)l[l[t][v]][v]=t;t=l[t][v];s t a t u s[t]=3;v=3−v;}t=j;v=2;while(t!=k){i f(s t a t u s[l[t][v]]!=3)l[l[t][v]][v]=t;t=l[t][v];s t a t u s[t]=3;v=3−v;}}}while(!q u i t);return0;}2.8Maximum Flow—Ford Fulkson in Matrix//Remember t o memset C[maxn][maxn]f o r a new caseint c[maxn][maxn],f[maxn][maxn],pnt[maxn],open[maxn],d[maxn],mk[maxn];int maxflow(int n,int s,int t){int cur,t a i l,i,j,u,v,flow=0;memset(f,0,s i z e o f(f));do{memset(mk,0,s i z e o f(mk));memset(d,0,s i z e o f(d));open[0]=s;mk[s]=1;d[s]=0x3f f f f f f f;for(pnt[s]=cur=t a i l=0;cur<=t a i l&&!mk[t];cur++)for(u=open[cur],v=1;v<=n;v++)i f(!mk[v]&&f[u][v]<c[u][v]){mk[v]=1;open[++t a i l]=v;pnt[v]=u;i f(d[u]<c[u][v]−f[u][v])d[v]=d[u];else d[v]=c[u][v]−f[u][v];}i f(!mk[t])break;flow+=d[t];for(u=t;u!=s;){v=u;u=pnt[v];f[u][v]+=d[t];f[v][u]=−f[u][v];} }while(d[t]>0);return flow;}。