谨以此纪念终将逝去的TYVJ

TYVJ 1139向远方奔跑

希望TYVJ能跑的更远【当然也要跑的快,最好是比某记者还快

1139,曾经的缩点神题(现在的缩点模板题2333

缩点后点权SPFA最长路

170行一遍AC

【我好强

ACCode:

/*******************
Problem:TYVJ 1139 向远方奔跑 
Author:CXY1999
Status:Accepted
*******************/
//谨以此纪念即将逝去的TYVJ 
//希望TYVJ能走的更远
//向远方奔跑吧!2333 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define maxn 3000+65
int n,m,Start;
vector G[maxn];
vector G2[maxn];
int D[maxn];
int D2[maxn];
bool END[maxn];
bool END2[maxn];
//建图相关 
int dfn[maxn];
int low[maxn];
int inS[maxn];
int st;
int Time;
int color[maxn];
int C;
struct Stack{
	int s[maxn+50];
	int ST;
	void push(int x){s[ST]=x;ST++;}
	void pop(){ST--;}
	int top(){return s[ST-1];}
	bool empty(){return ST==0;}
	void init(){ST=0;}
	Stack(){init();}
};
Stack S;
//tarjan相关 
int DIS[maxn];
queue Q; 
//SPFA相关
 
//Tarjan 
void SCC_tarjan(int x)
{
	dfn[x]=low[x]=Time;
	Time++;
	S.push(x);inS[x]=true;
	int buf=G[x].size();
	for(int i=0;iDIS[V])
			{
				DIS[V]=DIS[x]+D2[V];
				if(!inQ[V]){Q.push(V);inQ[V]=true;}
			}
		}
	}
}
void print_ans()
{
	int Ans=-1;
	for(int i=0;i<=C;i++)
	if(END2[i])
		Ans=max(Ans,DIS[i]);
	printf("%d\n",Ans);
}
int main()
{
	init();
	Tarjan();
	Shrink();
	SPFA(Start);
	print_ans();
	return 0;
}


你可能感兴趣的:(TYVJ)