您的位置:首页 > 其它

hdu 1384 Intervals 差分约束系统

2015-08-01 14:29 411 查看
注意初始化

#include "stdio.h"
#include "string.h"
#include "algorithm"
#include "queue"
#include "vector"
using namespace std;
const int inf=0x7FFFFFFF;
struct node
{
int to;
int c;
};
int d[50005],inq[50005];
vector<node>t[50005];
queue<int>q;

int main()
{
int i,n,u,v,w,k,mx,mn;
node m;
while(~scanf("%d",&n))
{
for(i=0;i<50005;i++)
{
t[i].clear();
d[i]=-inf;
inq[i]=0;
}

while(!q.empty()) q.pop();
mx=0;mn=99999;
for(i=0;i<n;i++)
{
scanf("%d%d%d",&u,&v,&w);
m.to=v+1;
m.c=w;
t[u].push_back(m);
if(mx<v) mx=v;
if(mn>u) mn=u;
}

for(i=mn;i<=mx;i++)
{
m.to=i;
m.c=-1;
t[i+1].push_back(m);

m.to=i+1;
m.c=0;
t[i].push_back(m);
}
d[mn]=0;
inq[mn]=1;
q.push(mn);
while(!q.empty())
{
u=q.front();
q.pop();
inq[u]=0;
for(i=0;i<t[u].size();i++)
{
v=t[u][i].to;
k=t[u][i].c+d[u];

if(d[v]<k)
{
d[v]=k;
if(inq[v]==0)
{
inq[v]=1;
q.push(v);
}
}
}
}

printf("%d\n",d[mx+1]);
}
return 0;
}


#include "stdio.h"
#include "string.h"
#include "algorithm"
#include "queue"
#include "vector"
using namespace std;
const int inf=0x7FFFFFFF;
struct node
{
int to;
int c;
};
int d[50005],inq[50005];
vector<node>t[50005];
queue<int>q;

int main()
{
int i,n,u,v,w,k,mx,mn;
node m;
while(~scanf("%d",&n))
{
for(i=0;i<50005;i++)
{
t[i].clear();
d[i]=inf;
inq[i]=0;
}

while(!q.empty()) q.pop();
mx=0;mn=99999;
for(i=0;i<n;i++)
{
scanf("%d%d%d",&u,&v,&w);
m.to=u;
m.c=-w;
t[v+1].push_back(m);
if(mx<v) mx=v;
if(mn>u) mn=u;
}

for(i=mn;i<=mx;i++)
{
m.to=i+1;
m.c=1;
t[i].push_back(m);

m.to=i;
m.c=0;
t[i+1].push_back(m);
}

inq[mx+1]=1;
d[mx+1]=0;
q.push(mx+1);
while(!q.empty())
{
u=q.front();
q.pop();
inq[u]=0;
for(i=0;i<t[u].size();i++)
{
v=t[u][i].to;
k=t[u][i].c+d[u];

if(d[v]>k)
{
d[v]=k;
if(inq[v]==0)
{
inq[v]=1;
q.push(v);
}
}
}
}

printf("%d\n",-d[mn]);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: