1. 程式人生 > 其它 >ToStringBuilder如何忽略null和空字串

ToStringBuilder如何忽略null和空字串

題目連結 https://www.luogu.com.cn/problem/P1807

拓撲排序求DAG(有向無環圖)的最長路。

放AC程式碼

 1 #include<bits/stdc++.h>
 2 #define MAX 50010
 3 using namespace std;
 4 int n,m,cnt,x;
 5 int head[MAX];
 6 int in[MAX];
 7 int dis[MAX];
 8 queue<int>q;
 9 
10 struct node
11 {
12     int v,w,next;
13 }edge[MAX];
14 
15 void
add(int u,int v,int w) 16 { 17 edge[++cnt].v=v; 18 edge[cnt].w=w; 19 edge[cnt].next=head[u]; 20 head[u]=cnt; 21 } 22 23 int main() 24 { 25 int n,m; 26 cin>>n>>m; 27 while(m--) 28 { 29 int u,v,w; 30 cin>>u>>v>>w; 31 add(u,v,w);
32 in[v]++; 33 } 34 memset(dis,-0x7f,sizeof(dis)); 35 //初始化,將除1的點全部賦為負無窮,保證從1開始 36 for(int i=1; i<=n; i++) 37 { 38 if(!in[i]) q.push(i); 39 if(i==1) dis[i]=0; 40 else dis[i]=-MAX; 41 } 42 while(!q.empty()) 43 { 44 x=q.front(); 45 q.pop();
46 for(int i=head[x]; i; i=edge[i].next) 47 {//像是最短路徑,只是把min換成max 48 in[edge[i].v]--;//入度-1 49 dis[edge[i].v]=max(dis[edge[i].v],dis[x]+edge[i].w);//更新,即: 50 //這個點的值最大=max(這個點原來的值,他的前驅節點+連線前驅和他自己的邊的值) 51 if(in[edge[i].v]==0) q.push(edge[i].v);//如果入度為0則入隊 52 } 53 } 54 if(dis[n]<0) cout<<-1<<endl;//不取0,因為可能所有的邊的權值都為0 55 else cout<<dis[n]<<endl; 56 return 0; 57 }