ZOJ 1967 POJ 2570 Fiber Network
2015-07-26 08:55
204 查看
枚举起点和公司,每次用DFS跑一遍图,预处理出所有的答案。询问的时候很快就能得到答案。
#include<cstdio> #include<cmath> #include<cstring> #include<vector> #include<algorithm> using namespace std; int jz[300][300][30]; int ans[300][300][30]; int flag[300]; vector<int>ljb[300]; int n; int S,T,G; void DFS(int now) { ans[S][now][G]=1; int i; for(i=0; i<ljb[now].size(); i++) { if(jz[now][ljb[now][i]][G]==1&&flag[ljb[now][i]]==0) { flag[ljb[now][i]]=1; DFS(ljb[now][i]); } } } int main() { int i,j,k; while(~scanf("%d",&n)) { if(n==0) break; for(i=0; i<=n; i++) ljb[i].clear(); memset(jz,0,sizeof(jz)); memset(ans,0,sizeof(ans)); while(1) { int u,v; char s[1000]; scanf("%d%d",&u,&v); if(u==0&&v==0) break; scanf("%s",s); ljb[u].push_back(v); for(i=0; s[i]; i++) jz[u][v][s[i]-'a']=1; } for(i=1; i<=n; i++) { for(j=0; j<26; j++) { memset(flag,0,sizeof(flag)); S=i; G=j; DFS(S); } } while(1) { int u,v; scanf("%d%d",&u,&v); if(u==0&&v==0) break; int i; int sc=0; for(i=0; i<26; i++) { if(ans[u][v][i]==1) { sc=1; printf("%c",i+'a'); } } if(sc==0) printf("-"); printf("\n"); } printf("\n"); } return 0; }
相关文章推荐
- HDU 1969 Pie
- 查看Linux服务器的所占用的IP地址
- SQL 获取连接客户端IP地址
- poj3018(欧拉路)
- PHP中的include和require
- Spring IOC源码详解之容器初始化
- 算法情缘
- 继承与派生
- 算法情缘
- Android源码编译apk导入第三方包报错
- JSTL简介
- 堆串的基本运算
- Springmvc同一资源不同描述配置-contentnegotiatingviewresolver
- C++生产和使用的临时对象
- ajaxFileUpload上传文件后提示下载的问题
- 使用 autoruns.exe 来查看自动启动的程序
- NYOJ 14 场地安排(它可以被视为一个经典问题)
- LUXURY 7
- OCP053(400-600)
- solr的一些问题