| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:我用spfa1000ms多求大牛优化!!!In Reply To:我用spfa1000ms多求大牛优化!!! Posted by:wocha at 2012-08-18 11:08:55 > #include <queue>
> #include <stdio.h>
> #include <iostream>
> #include <algorithm>
> #define inf1 21644
> #define MM 1010
> #define MMM 1000004
> using namespace std;
> int N;
> int edge_num,start[MMM],end[MMM],next[MMM],cost[MMM];
> void init(){
> }
> void addegde (int u,int v,int w){
> end[edge_num]=v;
> cost[edge_num]=w;
> next[edge_num]=start[u];
> start[u]=edge_num++;
> }
> int cnt[MM],vis[MM],dis[MM];
> bool spfa(int c){
> memset(vis,false,sizeof(vis));
> memset(cnt,0,sizeof(cnt));
> memset(dis,-inf1,sizeof(dis));
> queue<int> Q;
> Q.push(0),dis[0]=0,vis[0]=1,cnt[0]++;
> while(!Q.empty()){
> int u=Q.front();
> Q.pop(),vis[u]=0;
> for(int i=start[u];i!=-1;i=next[i]){
> int v=end[i],w=cost[i];
> if(dis[v]>dis[u]+w){
> dis[v]=dis[u]+w;
> if(!vis[v]){
> Q.push(v),vis[v]=1;
> if(++cnt[v]>c+1) return 0;
> }
> }
> }
> }
> return 1;
> }
> int main(){
> int M;
> while(~scanf("%d%d",&N,&M)){
> char st[44];int u,v,w;
> edge_num=0;
> memset(start,-1,sizeof(start));
> while(M--){
> scanf("%s",st);
> if(st[0]=='P'){
> scanf("%d%d%d",&u,&v,&w);
> addegde(u,v,w);
> addegde(v,u,-w);
> }else{
> scanf("%d%d",&u,&v);
> addegde(v,u,-1);
> }
> }
> for(int i=0;i<=N;i++){
> addegde(0,i,0);
> }
> bool Bool=spfa(N);
> if(Bool) puts("Reliable");
> else puts("Unreliable");
> }
> }
Followed by:
Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator