BestCoder Round #1
逃生
反向拓扑+优先队列+逆序输出
这里要注意,题中要求的不是输出字典序,而是要编号小的尽量考前(首先1尽量考前,然后2尽量考前。。)。
比如说 约束是 4->1,3->2,字典序答案就是3 2 4 1,但是编号小的尽量考前答案就是 4 1 3 2。
为什么正向建图不行呢?正向建图我们不知道怎么样才能最先找到编号为1的,然后再最先找到2的。。。拿上面这个例子来说,我们应该先找到4这样才能先使得1优先,但是这样的找法是没有规律的。
正解是反向建图,这样每次先找到编号大的,最后自然使得编号小的留在后。最后逆序输出即可。
注意一个样例
input: 1 3 1 3 1 answer: 3 1 2 而不是 2 3 1
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<queue> #include<algorithm> #define MAXN 30005 using namespace std; vector<int> g[MAXN]; int in[MAXN]; int n; void clear() { ; i<=n; ++i) { g[i].clear(); ; } } int main() { int T; scanf("%d",&T); while(T--) { int m; scanf("%d%d",&n,&m); clear(); while(m--) { int a,b; scanf("%d%d",&a,&b); g[b].push_back(a); in[a]++; } priority_queue<int,vector<int>,less<int> > pq; ; i<=n; ++i) ) pq.push(i); vector<int> ans; while(!pq.empty()) { int p=pq.top(); pq.pop(); ans.push_back(p); ; i<g[p].size(); ++i) { int &u=g[p][i]; in[u]--; if(!in[u]) pq.push(u); } } ; i>=; --i) ) printf("%d",ans[i]); else printf(" %d",ans[i]); printf("\n"); } ; }
项目管理
维护一个sum[]和val[]的数组。sum中存比当前结点度大的点值的和,val存当前结点的值。对每个点开一个vector存比它度大的点集。
每次更新,更新自身的val,同时更新vector中点的sum。
每次查询,结果为自身sum与vector中点(除去与当前点度数相同的点,因为这部分结果已经在sum中了)的val的和。
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #include<queue> #include<algorithm> #define MAXN 100005 using namespace std; vector<int> g[MAXN],big[MAXN]; int val[MAXN],sum[MAXN],in[MAXN]; void clear(int n) { ; i<=n; ++i) { g[i].clear(); big[i].clear(); val[i]=sum[i]=; } } int main() { int T; scanf("%d",&T); while(T--) { int n,m; scanf("%d%d",&n,&m); clear(n); while(m--) { int a,b; scanf("%d%d",&a,&b); g[a].push_back(b); g[b].push_back(a); in[a]++; in[b]++; } ; i<=n; ++i) ; j<g[i].size(); ++j) if(in[g[i][j]]>=in[i]) big[i].push_back(g[i][j]); int q; scanf("%d",&q); while(q--) { int cmd; scanf("%d",&cmd); ) { int a,b; scanf("%d%d",&a,&b); val[a]+=b; ; i<big[a].size(); ++i) sum[big[a][i]]+=b; } else { int a; scanf("%d",&a); int ans=sum[a]; ; i<big[a].size(); ++i) if(in[a]!=in[big[a][i]]) ans+=val[big[a][i]]; printf("%d\n",ans); } } } ; }
BestCoder Round #1的更多相关文章
- BestCoder Round #89 02单调队列优化dp
1.BestCoder Round #89 2.总结:4个题,只能做A.B,全都靠hack上分.. 01 HDU 5944 水 1.题意:一个字符串,求有多少组字符y,r,x的下标能组成等比数列 ...
- BestCoder Round #90 //div all 大混战 一题滚粗 阶梯博弈,树状数组,高斯消元
BestCoder Round #90 本次至少暴露出三个知识点爆炸.... A. zz题 按题意copy Init函数 然后统计就ok B. 博弈 题 不懂 推了半天的SG..... 结果这 ...
- bestcoder Round #7 前三题题解
BestCoder Round #7 Start Time : 2014-08-31 19:00:00 End Time : 2014-08-31 21:00:00Contest Type : ...
- Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- Bestcoder round #65 && hdu 5592 ZYB's Premutation 线段树
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submissio ...
- 暴力+降复杂度 BestCoder Round #39 1002 Mutiple
题目传送门 /* 设一个b[]来保存每一个a[]的质因数的id,从后往前每一次更新质因数的id, 若没有,默认加0,nlogn复杂度: 我用暴力竟然水过去了:) */ #include <cst ...
- 贪心 BestCoder Round #39 1001 Delete
题目传送门 /* 贪心水题:找出出现次数>1的次数和res,如果要减去的比res小,那么总的不同的数字tot不会少: 否则再在tot里减去多余的即为答案 用set容器也可以做,思路一样 */ # ...
- BestCoder Round #88
传送门:BestCoder Round #88 分析: A题统计字符串中连续字串全为q的个数,预处理以下或加个cnt就好了: 代码: #include <cstdio> #include ...
- BestCoder Round #69 (div.2) Baby Ming and Weight lifting(hdu 5610)
Baby Ming and Weight lifting Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K ( ...
- BestCoder Round #68 (div.2) tree(hdu 5606)
tree Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submis ...
随机推荐
- 【bzoj1791】岛屿
[bzoj1791]岛屿 题意 求基环树的直径. \(n\leq 100000\) 分析 这道题的题解貌似很少啊. 所以自己也写一份吧. 首先找出基环树的环. 那么树的直径有两种情况: ①以环为根的某 ...
- \bin\sh.exe:*** Couldn't reserve space for cygwin's heap,Win32 error 0
Git一直使用都好好的,今天git pull的时候,报了如下的错误,\bin\sh.exe:*** Couldn't reserve space for cygwin's heap,Win32 err ...
- (14)odoo加载机制
Odoo的启动通过openerp-server脚本完成,它是系统的入口. 然后加载配置文件openerp-server.conf 或者 .openerp_serverrc: openerp-serve ...
- TCP与UDP
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议:可靠.保证正确性:顺序到达:流量控制.拥塞控制:重传机制.窗口机制:对系统资源.时间要求多:流模式S ...
- hdu------2488Tornado(几何)
Tornado Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Sub ...
- 172. Factorial Trailing Zeroes -- 求n的阶乘末尾有几个0
Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in log ...
- css中的zoom
CSS中zoom:1的作用兼容IE6.IE7.IE8浏览器,经常会遇到一些问题,可以使用zoom:1来解决,有如下作用:触发IE浏览器的haslayout解决ie下的浮动,margin重叠等一些问题. ...
- BZOJ3993 [SDOI2015]星际战争
二分答案...然后最大流验证是否可行... 没了,好水啊QAQ /************************************************************** Prob ...
- sql server还原数据库文件(.bak)常见问题解决办法笔记
还原的时候出现错误:备份集中的数据库备份与现有的数据库不同 SQL Server 2005数据库还原出错错误具体信息为:备份集中的数据库备份与现有的A数据库不同 具体操作如下:第一次:新建了数据库A, ...
- HtmlHelper—DropDownList:SelectList、SelectListItem
前言 在项目中经常使用到DropDownList来显示数据库中的数据,典型的例子为为某书籍选择所属类型. 使用SelectList来实现: 实现一: Controller 代码 SelectList ...