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 |
求测试数据,自环,关系矛盾都考虑#include<iostream> #include<algorithm> #include<vector> #include<queue> #include<string> #define MAX 2000000 using namespace std; typedef struct node { int s,e,d; }node; node v[80001];//x轴上的关系 node w[80001];//y轴上的关系 int lenv,lenw; int dis[501]; int n,m,check; int dx[501][501]; void addedge(int x,int y,char *c) { int i; if(strcmp(c,"N")==0)//N { if(dx[x][y]!=0&&dx[x][y]!=1)check=1; dx[x][y]=1; v[lenv].s=x; v[lenv].e=y; v[lenv++].d=1; v[lenv].s=y; v[lenv].e=x; v[lenv++].d=-1; } if(strcmp(c,"E")==0)//S { if(dx[x][y]!=0&&dx[x][y]!=2)check=1; dx[x][y]=2; v[lenv].s=x; v[lenv].e=y; v[lenv++].d=-1; v[lenv].s=y; v[lenv].e=x; v[lenv++].d=1; } if(strcmp(c,"S")==0)//E { if(dx[x][y]!=0&&dx[x][y]!=3)check=1; dx[x][y]=3; w[lenw].s=x; w[lenw].e=y; w[lenw++].d=1; w[lenw].s=y; w[lenw].e=x; w[lenw++].d=-1; } if(strcmp(c,"W")==0)//W { if(dx[x][y]!=0&&dx[x][y]!=4)check=1; dx[x][y]=4; w[lenw].s=x; w[lenw].e=y; w[lenw++].d=-1; w[lenw].s=y; w[lenw].e=x; w[lenw++].d=1; } if(strcmp(c,"NE")==0)//NE { if(dx[x][y]!=0&&dx[x][y]!=5)check=1; dx[x][y]=5; v[lenv].s=x; v[lenv].e=y; v[lenv++].d=1; v[lenv].s=y; v[lenv].e=x; v[lenv++].d=-1; w[lenw].s=x; w[lenw].e=y; w[lenw++].d=1; w[lenw].s=y; w[lenw].e=x; w[lenw++].d=-1; } if(strcmp(c,"NW")==0)//NW { if(dx[x][y]!=0&&dx[x][y]!=6)check=1; dx[x][y]=6; v[lenv].s=x; v[lenv].e=y; v[lenv++].d=1; v[lenv].s=y; v[lenv].e=x; v[lenv++].d=-1; w[lenw].s=x; w[lenw].e=y; w[lenw++].d=-1; w[lenw].s=y; w[lenw].e=x; w[lenw++].d=1; } if(strcmp(c,"SE")==0)//SE { if(dx[x][y]!=0&&dx[x][y]!=7)check=1; dx[x][y]=7; v[lenv].s=x; v[lenv].e=y; v[lenv++].d=-1; v[lenv].s=y; v[lenv].e=x; v[lenv++].d=1; w[lenw].s=x; w[lenw].e=y; w[lenw++].d=1; w[lenw].s=y; w[lenw].e=x; w[lenw++].d=-1; } if(strcmp(c,"SW")==0)//SW { if(dx[x][y]!=0&&dx[x][y]!=8)check=1; dx[x][y]=8; v[lenv].s=x; v[lenv].e=y; v[lenv++].d=-1; v[lenv].s=y; v[lenv].e=x; v[lenv++].d=1; w[lenw].s=x; w[lenw].e=y; w[lenw++].d=-1; w[lenw].s=y; w[lenw].e=x; w[lenw++].d=1; } } bool bellman_ford(int k) { int i,j,flag; for(i=1;i<=n;i++)dis[i]=2000000; dis[1]=0; // memset(dis,0,sizeof(dis)); if(k==0) { for(j=0;j<n;j++) { flag=1; for(i=0;i<lenv;i++) { if(dis[v[i].e]>dis[v[i].s]+v[i].d) { flag=0; dis[v[i].e]=dis[v[i].s]+v[i].d; } } if(flag)return 1; } return 0; } if(k==1) { for(j=0;j<n;j++) { flag=1; for(i=0;i<lenw;i++) { if(dis[w[i].e]>dis[w[i].s]+w[i].d) { flag=0; dis[w[i].e]=dis[w[i].s]+w[i].d; } } if(flag)return 1; } return 0; } } int main() { int i,j,k,t,x,y; scanf("%d",&t); char b[100]; while(t--) { scanf("%d%d",&n,&m); lenv=lenw=0; memset(dx,0,sizeof(dx)); check=0; for(i=1;i<=m;i++) { scanf("%d%s%d",&x,b,&y); if(x==y)check=1; addedge(x,y,b); } if(check){printf("IMPOSSIBLE\n");continue;} if(bellman_ford(0)==0||bellman_ford(1)==0)printf("IMPOSSIBLE\n"); else printf("POSSIBLE\n"); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator