Father Christmas flymouse
|
Father Christmas flymouse
Description After retirement as contestant from WHU ACM Team, flymouse volunteered to do the odds and ends such as cleaning out the computer lab for training as extension of his contribution to the team. When Christmas came, flymouse played Father Christmas to give gifts to the team members. The team members lived in distinct rooms in different buildings on the campus. To save vigor, flymouse decided to choose only one of those rooms as the place to start his journey and follow directed paths to visit one room after another and give out gifts en passant until he could reach no more unvisited rooms. During the days on the team, flymouse left different impressions on his teammates at the time. Some of them, like LiZhiXu, with whom flymouse shared a lot of candies, would surely sing flymouse’s deeds of generosity, while the others, like snoopy, would never let flymouse off for his idleness. flymouse was able to use some kind of comfort index to quantitize whether better or worse he would feel after hearing the words from the gift recipients (positive for better and negative for worse). When arriving at a room, he chould choose to enter and give out a gift and hear the words from the recipient, or bypass the room in silence. He could arrive at a room more than once but never enter it a second time. He wanted to maximize the the sum of comfort indices accumulated along his journey. Input The input contains several test cases. Each test cases start with two integers N and M not exceeding 30 000 and 150 000 respectively on the first line, meaning that there were N team members living in N distinct rooms and M direct paths. On the next N lines there are N integers, one on each line, the i-th of which gives the comfort index of the words of the team member in the i-th room. Then follow M lines, each containing two integers i and j indicating a directed path from the i-th room to the j-th one. Process to end of file. Output For each test case, output one line with only the maximized sum of accumulated comfort indices. Sample Input 2 2 Sample Output 35 Hint 32-bit signed integer type is capable of doing all arithmetic. Source POJ Monthly--2006.12.31, Semp
|
【思路】
最大点权值路径 tarjian缩点+spfa
缩点的权值只记录正的值。
【code】
#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<algorithm>
#include<queue>
using namespace std;
#define ME 150005
#define NM 500009
vector<int>vec[NM];
int n,m,val[NM],head[NM],dfn[NM],low[NM],u,v;
int col[NM],belong[NM],sumcol,ans,in[NM],out[NM];
int sumedge,stack[NM],instack[NM],dis[NM],inq[NM];
int tim,top;
struct Edge {
int x,y,nxt;
Edge(int x=,int y=,int nxt=):
x(x),y(y),nxt(nxt) {}
} edge[ME];
void add(int x,int y)
{
edge[++sumedge]=Edge(x,y,head[x]);
head[x]=sumedge;
}
void fir()
{
memset(head,,sizeof(head));
memset(stack,,sizeof(stack));
memset(instack,,sizeof(instack));
memset(dis,,sizeof(dis));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(out,,sizeof(out));
memset(in,,sizeof(in));
memset(inq,,sizeof(inq));
for(int i=; i<n; i++)
vec[i].clear();
top=;
sumedge=;
sumcol=;
tim=;
}
void tarjian(int x)
{
dfn[x]=low[x]=++tim;
stack[top++]=x;
instack[x]=;
for(int i=head[x]; i; i=edge[i].nxt)
if(instack[edge[i].y])
low[x]=min(low[x],dfn[edge[i].y]);
else if(!dfn[edge[i].y]) {
tarjian(edge[i].y);
low[x]=min(low[x],low[edge[i].y]);
} else {
}
if(low[x]==dfn[x]) {
sumcol++;
while(stack[top-]!=x) {
col[stack[top-]]=sumcol;
instack[stack[top-]]=false;
top--;
}
stack[top]=sumcol;
top--;
}
}
void spfa()
{
queue<int>q;
q.push();
inq[]=;
while(!q.empty()) {
int now=q.front();
q.pop();
inq[now]=;
for(int i=vec[now].size()-; i>=; i--) {
int to=vec[now][i];
if(dis[to]<dis[now]+belong[to]) {
dis[to]=dis[now]+belong[to];
if(!inq[to]) {
inq[to]=;
q.push(to);
} }
}
}
}
int main()
{
while(scanf("%d %d",&n,&m)) {
fir();
for(int i=; i<n; i++)
{
scanf("%d",&val[i]);
val[i]=max(val[i],);
} for(int i=; i<=m; i++)
{
scanf("%d %d",&u,&v);
add(u,v);
}
for(int i=; i<n; i++)
if(!dfn[i])tarjian(i);
for(int i=;i<n;i++)cout<<col[i]<<endl;
for(int i=; i<n; i++)
belong[col[i]]+=val[i];
for(int i=; i<n; i++) {
for(int j=head[i]; j; j=edge[j].nxt) {
if(col[i]==col[edge[j].y])continue;
vec[col[i]].push_back(col[edge[i].y]);
out[col[i]]++;
in[col[edge[i].y]]++;
}
}
for(int i=;i<=sumcol;i++)
if(!in[i])vec[].push_back(i);
spfa();
for(int i=; i<=sumcol; i++) {
if(!out[i])ans=max(ans,dis[i]);
}
printf("%d\n",ans);
}
return ;
}
Father Christmas flymouse的更多相关文章
- POJ3160 Father Christmas flymouse[强连通分量 缩点 DP]
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3241 Accep ...
- POJ 3126 --Father Christmas flymouse【scc缩点构图 && SPFA求最长路】
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3007 Accep ...
- L - Father Christmas flymouse
来源poj3160 After retirement as contestant from WHU ACM Team, flymouse volunteered to do the odds and ...
- poj 3160 Father Christmas flymouse
// 题目描述:从武汉大学ACM集训队退役后,flymouse 做起了志愿者,帮助集训队做一些琐碎的事情,比如打扫集训用的机房等等.当圣诞节来临时,flymouse打扮成圣诞老人给集训队员发放礼物.集 ...
- poj 3160 Father Christmas flymouse【强连通 DAG spfa 】
和上一道题一样,可以用DAG上的动态规划来做,也可以建立一个源点,用spfa来做 #include<cstdio> #include<cstring> #include< ...
- POJ——T3160 Father Christmas flymouse
Time Limit: 1000MS Memory Limit: 131072K Total Submissions: 3496 Accepted: 1191 缩点,然后每个新点跑一边SPFA ...
- Father Christmas flymouse--POJ3160Tarjan
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Description After retirement as c ...
- POJ:3160-Father Christmas flymouse
Father Christmas flymouse Time Limit: 1000MS Memory Limit: 131072K Description After retirement as c ...
- 【转】Tarjan&LCA题集
转自:http://blog.csdn.net/shahdza/article/details/7779356 [HDU][强连通]:1269 迷宫城堡 判断是否是一个强连通★2767Proving ...
随机推荐
- Scrapy安装向导
原文地址 https://doc.scrapy.org/en/latest/intro/install.html 安装Scrapy Scrapy运行在python2.7和python3.3或以上版本( ...
- jdbcTemplaate queryForObject的两个易混淆的方法
JdbcTemplate中有两个可能会混淆的queryForObject方法: 1. Object queryForObject(String sql, Object[] args, Class ...
- 从epoll构建muduo-12 多线程入场
mini-muduo版本号传送门 version 0.00 从epoll构建muduo-1 mini-muduo介绍 version 0.01 从epoll构建muduo-2 最简单的epoll ve ...
- Java各类格式转换
1.Java 根据固定格式的Excel生成实体类 2.GPS 经纬度转换为 经过旋转后的平面坐标
- Python学习总结之五 -- 入门函数式编程
函数式编程 最近对Python的学习有些怠慢,最近的学习态度和学习效率确实很不好,目前这种病况正在好转. 今天,我把之前学过的Python中函数式编程简单总结一下,分享给大家,也欢迎并感谢大家提出意见 ...
- ASP.NET动态网站制作(13)-- JQ(5)
前言:jq的最后一节课,主要讲解应用, 内容: 1.会飞的li: HTML代码: <!DOCTYPE html> <html xmlns="http://www.w3.or ...
- 苹果开发之COCOA编程(第三版)下半部分
第十八章:Image和鼠标事件 1.NSResponderNSView继承自NSResponder类.所有的事件处理方法都定义在NSResponder类中.NSResponder申明了如下方法:- ( ...
- VS中Component Class、User Control及Custom Control的区别 .
.NET Framework 为您提供了开发和实现新控件的能力.除了常见的用户控件外,现在您会发现,您可以编写能执行自身绘图的自定义控件,甚至还可以通过继承扩展现有控件的功能.确定创建何种类型的控件可 ...
- ajax工作原理(转)
在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方面很窄,对AJAX技术的背景.原理.优缺点等各个方面都很少涉及null.这次写这篇文章的背景是因为公司需要对内部程序员做一个培训.项 ...
- sort()函数到底是怎样进行数字排序的
很多人会用sort(),并不见得知道它具体是怎样给数字排序的.其实不知道也行,会用就可以,感兴趣的可以来看看. var numberArray = [2,4,1,3]; numberArray.sor ...