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 ...
随机推荐
- (x&y) + ((x^y)>>1)即x和y的算数平均值
(x&y) + ((x^y)>>1)相当于(x+y)/2 (x&y)+((x^y)>>1),把x和y里对应的每一位(指二进制位)都分成三类,每一类分别计算平均值 ...
- 例题:for循环迭代法。一个棋盘有n个格子,第一个格子有一粒米,第二个格子有两粒米,第三个格子有四粒米,依次类推,第n个格子里有多少粒米,棋盘里一共有多少粒米。
decimal a = 1;//定义初始值,decimal可以定义比较长的数值 decimal sum = 1; Console.WriteLine(&qu ...
- 资源 之 4.2 内置Resource实现(拾)
4.2 内置Resource实现 4.2.1 ByteArrayResource ByteArrayResource代表byte[]数组资源,对于"getInputStream" ...
- 栅栏 CyclicBarrier
java.util.concurrent.CyclicBarrier 类是一种同步机制,它能够对处理一些算法的线程实现同步.换句话讲,它就是一个所有线程必须等待的一个栅栏,直到所有线程都到达这里,然后 ...
- [backbone] Getting Started with Backbone.js
一.简介 Backbone 是一个 JavaScript MVC 框架,它属于轻量级框架,且易于学习掌握.模型.视图.集合和路由器从不同的层面划分了应用程序,并负责处理几种特定事件.处理 Ajax 应 ...
- iisreset和w3wp的关系
iisreset是iis自带一个命令行工具.用法: iisreset [computername] /RESTART 停止然后重新启动所有 Internet 服务. /START ...
- Swift和Objective-C混编注意
前言 Swift已推出数年,与Objective-C相比Swift的语言机制及使用简易程度上更接地气,大大降低了iOS入门门槛.当然这对新入行的童鞋们来讲,的确算是福音,但对于整个iOS编程从业者来讲 ...
- Objective-C:Foundation框架-常用类-NSObject
NSObject是所有类的基类,其常见用法有: #import <Foundation/Foundation.h> @interface Person : NSObject - (void ...
- SQL语句技巧(上个样式太差了)
以下并非本人整理,但是看后感觉相当不错,特此分享. 1.应用程序中,保证在实现功能的基础上,尽量减少对数据库的访问次数:通过搜索参数,尽量减少对表的访问行数,最小化结果集,从而减轻网络负担:能够分 ...
- CSS 收集
margin:0 auto margin后面如果只有两个参数的话,第一个表示top和bottom,第二个表示left和right, 因为0 auto,表示上下边界为0,左右则根据宽度自适应相同值(即居 ...