其实 写了很多 题。。
只是 没写 博客
第一道差分约束 题 写了很长时间 诶
思路:
根据约束条件 >= 可以 用 最长路跑
但是 我用了 负权边 跑最短路
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
//by mars_ch
struct data
{
int f,t,w;
int nxt;
}e[30005*2];
int first[5005];
int n,m,tot;
int inq[5005],dis[5005];
void add(int a,int b,int c)
{
e[tot].f=a;
e[tot].t=b;
e[tot].w=c;
e[tot].nxt=first[a];
first[a]=tot++;
}
void spfa()
{
queue<int> q;
memset(dis,0x3f,sizeof(dis));
dis[0]=0;
inq[0]=1;
q.push(0);
while(!q.empty())
{
int u=q.front();
q.pop();
inq[u]=0;
for(int i=first[u];i!=-1;i=e[i].nxt)
{
int v=e[i].t;
if(dis[v]>dis[u]+e[i].w)
{
dis[v]=dis[u]+e[i].w;
if(!inq[v])
{
inq[v]=1;
q.push(v);
}
}
}
}
printf("%d\n",-dis[n]);
}
int main()
{
memset(first,-1,sizeof(first));
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
add(a-1,b,-c);
}
for(int i=1;i<=n;i++)
{
add(i,i-1,1);
add(i-1,i,0);
}
spfa();
}