usaco street race(dfs)
来源:互联网 发布:编程方法学 编辑:程序博客网 时间:2024/05/22 10:25
一开始我觉得很麻烦但第一题好做由于数据较小直接每个点删后dfs就可以了,第二问我不知道如何判断有没有公共的道路,最后看别人的也挺简单的就是看分别从两条公路的起点开始dfs如果他们能到达同一点就代表有公共道路。那就好做了。
/*ID: jinbo wuTASK: race3LANG: C++*/#include<bits/stdc++.h>using namespace std;int g[55][55];bool vis[55];bool vis1[55];int num1[55];int num2[55];int flag;int n;void dfs(int m){vis[m]=1;for(int i=0;i<n;i++){if(g[m][i]&&!vis[i])dfs(i);}}void dfs1(int m){if(vis[m]==1){flag=0;return ;}vis1[m]=1;for(int i=0;i<n;i++){if(!vis1[i]&&g[m][i])dfs1(i);}}int main(){freopen("race3.in","r",stdin);freopen("race3.out","w",stdout);int a,b;n=-1;cin>>a; while(a!=-1) { n++; if(a==-2) { cin>>a; continue; } g[n][a]=1; cin>>b; while(b!=-2) { g[n][b]=1; cin>>b;}cin>>a;}n++;int l1=0,l2=0;for(int i=1;i<n-1;i++){memset(vis,0,sizeof(vis));vis[i]=1;dfs(0);if(!vis[n-1])num1[l1++]=i;}for(int i=0;i<l1;i++){ flag=1; memset(vis,0,sizeof(vis)); memset(vis1,0,sizeof(vis1)); vis[num1[i]]=1; dfs(0); vis[num1[i]]=0; dfs1(num1[i]); if(flag) num2[l2++]=num1[i];} cout<<l1; for(int i=0;i<l1;i++) cout<<" "<<num1[i]; cout<<endl; cout<<l2; for(int i=0;i<l2;i++) cout<<" "<<num2[i]; cout<<endl;}
0 0
- usaco street race(dfs)
- usaco 4.3 Street Race
- USACO 4.3 Street Race
- usaco 4.3 Street Race(搜索)
- usaco 4.3.4 Street Race
- USACO Street Race 解题报告
- USACO-Section 4.3 Street Race (枚举&&BFS)
- USACO Section 4.3 Street Race - 简单搜索
- usaco training 4.3.3 Street Race 题解
- usaco 4.3 Street Race 2010.8.7
- Street Race
- C++——【USACO 4.3.2】——Street Race
- Section 4.3 Street Race
- PKU1172 street race
- poj 1172 Street Race
- poj 1172 Street Race
- usaco4.3.2 Street Race
- [USACO4.3.2]Street Race
- DBA_HIST_SYSMETRIC_SUMMARY中的Network Traffic Volume Per Sec 指标是指什么?
- spring---整合Junit,整合web
- caffe-windows(仅cpu)配置过程
- 除夕和春节
- +-字符串
- usaco street race(dfs)
- leetcode 3. Longest Substring Without Repeating Characters
- 删除右键新建多余菜单
- vue-class绑定
- hdu 1599 Common Subsequence(DP)
- 孩子们的游戏(圆圈中最后剩下的数)(约瑟夫环问题)
- linux给用户添加sudo权限
- ios swift 图形的旋转 atan2 函数
- Bash shell 常用快捷键