我写的SPFA 数据很水,0MS #include<iostream> #include<vector> #include<cstdio> #include<queue> using namespace std; const int INF=1000000; struct GNode { GNode(){} GNode(short num,short len):len(len),num(num){} short len,num; }; const int MAX=110; int Len[MAX]; int SPFA(const vector<vector<GNode> >& Graph,int Source) { for(unsigned i=0;i!=Graph.size();i++) Len[i]=INF; queue<int> Q; Q.push(Source); Len[Source]=0; while(!Q.empty()) { int u=Q.front();Q.pop(); for(unsigned i=0;i!=Graph[u].size();i++) if(Len[Graph[u][i].num]>Len[u]+Graph[u][i].len) { Len[Graph[u][i].num]=Len[u]+Graph[u][i].len; Q.push(Graph[u][i].num); } } return *max_element(Len,Len+Graph.size()); } int main() { int v,n,num,len; while(~scanf("%d",&v) && v) { vector<vector<GNode> > Graph(v); for(int i=0;i!=v;i++) { scanf("%d",&n); while(n--) { scanf("%d%d",&num,&len); Graph[i].push_back(GNode(num-1,len)); } } int mindis=INF,mini,data; for(int i=0;i!=v;i++) { data=SPFA(Graph,i); if(data<mindis) {mindis=data;mini=i;} } printf("%d %d/n",mini+1,mindis); } }