洛谷OJ:P1250 种树(差分约束)

    科技2025-01-28  18

    #include<queue> #include<vector> #include<string> #include<math.h> #include<stdio.h> #include<string.h> #include<iostream> #include<algorithm> using namespace std; #define maxn 35005 #define ll long long int n,m,dis[maxn],cnt[maxn]; bool vis[maxn]; queue<int> que; struct node{ int to,val; node(int to,int val):to(to),val(val){} }; vector<node> q[maxn]; void SPFA(int start,int n){ memset(dis,-127,sizeof(dis)); dis[start]=0; que.push(start); while(!que.empty()){ int now=que.front(); que.pop(); vis[now]=false; for(int i=0;i<q[now].size();i++){ int v=q[now][i].to; if(dis[v]<dis[now]+q[now][i].val){ dis[v]=dis[now]+q[now][i].val; if(!vis[v]){ vis[v]=true; que.push(v); cnt[v]++; } } } } } int main(void){ int x,y,w,ans=0; scanf("%d%d",&n,&m); for(int i=0;i<m;i++){ scanf("%d%d%d",&x,&y,&w); q[x-1].push_back(node(y,w)); } for(int i=0;i<=n;i++) q[n+1].push_back(node(i,0)); for(int i=0;i<n;i++){ q[i].push_back(node(i+1,0)); q[i+1].push_back(node(i,-1)); } SPFA(n+1,n); printf("%d\n",dis[n]); return 0; }

     

    Processed: 0.009, SQL: 8