Reward

发工资,以前看过这题,做没做忘了(应该是没做)。

很明显的拓排。但数据范围这么大,吓得我当时就不敢动手。后来找题解发现还是相当于两层循环(are you kidding me?)当时卡在了不造怎么分层累加,比如4个人,2个关系,1>2,3>4。那么1,3在同一层,2,4在同一层。

题意:年终奖金最低888,但员工间有要求,n个员工,m个要求,m行每行两个数代表前一个人的工资要多于后一个人的。为了满足所有员工的要求,问boss最少需要多少money。

思路:二维数组爆内存,看到几个MLE的让我笑会。用vector存图,把前一个存进后一个里,前一个的度加一。q[v].push_back(u),好吧,比赛的时候,没想到要这样的。然后把所有度为0的放进队列里面。其实这就在计算第一层了。把与这些点相连的点的度全部减一,再把度变为0的点又加进队列里(第二层的)。重复操作。。判环可以把整个过程度为0的数量计算出来,再与n比较,也可以在最终队列结束后一层循环判断是否有度大于0的点,因为正常情况下所有的点都会进入队列一次,有环的话则度不会减为0也不会进入队列。

const int N=1e4+10;
vector<int>q[N];
queue<int>que;
int n,m,du[N],now;
void init()
{
now=888;//第0层的工资即初始工资;
for(int i=0; i<=n; i++) q[i].clear();
memset(du,0,sizeof(du));
while(!que.empty()) que.pop();
}
int main()
{
while(~scanf("%d%d",&n,&m))
{
init();
int u,v;
while(m--)
{
scanf("%d%d",&u,&v);
q[v].push_back(u);//逆拓排;
du[u]++;
}
int cnt=0;
for(int i=1; i<=n; i++)
if(!du[i])
{
que.push(i);
cnt++;
}
int ans=0;
while(!que.empty())
{
int size=que.size();
while(size--)//按层累加
{
int v=que.front();
que.pop();
ans+=now;
for(int i=0; i<q[v].size(); i++)
{
int u=q[v][i];
du[u]--;
if(!du[u])
{
que.push(u);
cnt++;
}
}
}
now++;
}
int f=0;
for(int i=1;i<=n&&!f;i++)
if(du[i]) f=1;
if(f) printf("-1\n");
else printf("%d\n",ans);
}
return 0;
}

这样没超时我是比较奇怪的,拓排运用的并不是很多,也不是很熟练,这样也算加深对知识点的理解运用吧。

最新文章

  1. 一起学微软Power BI系列-使用技巧(5)自定义PowerBI时间日期表
  2. MSYS2——Windows平台下模拟linux环境的搭建
  3. C#把 DataTable转换为Model实体
  4. js 自动插入分号
  5. Xcode7 项目转 Xcode6 时 出现问题
  6. webpack我遇到的一些坑
  7. Codeforces723E One-Way Reform【欧拉回路】
  8. PHP注释有意思的排列
  9. Linux重定向的理解
  10. Java从入门到精通——数据库篇之JAVA中的对Oracle数据库操作
  11. ARM简介(科普文)
  12. CALayer &amp; UIView 关系浅析
  13. JDBC(MySQL)一周学习总结(一)
  14. 如何让低版本IE浏览器支持HTML5标签并为其设置样式
  15. 认识EasyUI——DataGrid的onClickRow事件
  16. JavaMail发送邮箱
  17. npm 传入参数
  18. 第十八节:详解Java抽象类和接口的区别
  19. &lt;转&gt;安全测试思维导图
  20. python成长之路六-函数的初识

热门文章

  1. Closures闭包
  2. Ionic之ui-sref引入图片,图片部分挡住解决方案
  3. Ionic之存储信息、取出存储信息、注销存储信息
  4. 借教室 线段树and二分
  5. Lumia 刷机(强刷)Message send failed解决办法
  6. elasticsearch-sql安装
  7. 一个简单的139邮箱登录脚本--->java-selenium
  8. javaee 第六周作业
  9. 常用的--&gt;查找算法与排序算法
  10. gitlab利用ssh方式拉取代码