鱼C论坛

 找回密码
 立即注册
查看: 4638|回复: 17

求教呀。。。是关于图的问题 求思路。。。求围观

[复制链接]
发表于 2013-2-2 11:31:54 | 显示全部楼层 |阅读模式
10鱼币
在acm上看了个题。。。Forming teams题目提示要用到图、深度遍历的知识。 原题连接 http://acm.guet.edu.cn/problemset/problem/1101
梗概:有n个人到足球场踢足球,要分成两组。其中有m对人之间有矛盾,但是每个人最多和两个人之间有矛盾。
有矛盾的人不能在同一个队伍。问最少要有几个人不能参加。
栗子:  6个人到操场踢球,有6对矛盾,分别是1-2 , 2-3,3-1,4-5 ,5-6 ,6-4。现在最少有2个人不能参加。
我自己的思路:从任意一个数开始遍历如果第四次能够回到原来的数字就计数一次,最后计得的数就是最少要有几个人不能参加。形象的说能构成一个三角形就计数一次。
语言表达有限。。。
求思路。。。求围观。。。


最佳答案

查看完整内容

算法:看有多少个人数为奇数的环,有多少个就要减去多少人,最后看剩下的是奇数还是偶数,奇数的话还要再减去一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2013-2-2 11:31:55 | 显示全部楼层
  1. #include <iostream>
  2. #include <cstring>

  3. using namespace std;

  4. int ans,g[200][200],bz[200][200],d[200];

  5. /* n the number of students
  6. ** k how many students in a  round
  7. ** s and t the start student
  8. */
  9. void dfs(int n,int k,int s,int t)
  10. {
  11.         if(s == t&& k != 0)
  12.         {
  13.                 if(k%2)
  14.                 {
  15.                         ans++;
  16.                         d[t]=1;
  17.                 }
  18.                 return ;
  19.         }       
  20.        
  21.         for(int i=1;i<=n;i++)
  22.         {       
  23.                 if(g[s][i]==1&&bz[s][i]==0&&d[i]==0)
  24.                 {       
  25.                         bz[s][i]=bz[i][s]=1;
  26.                         dfs(n,k+1,i,t);         
  27.                         bz[s][i]=bz[i][s]=0;
  28.                 }
  29.         }
  30. }

  31. int main()
  32. {
  33.         int n,m,a,b;
  34.         while(cin>>n>>m)
  35.         {
  36.                 memset(g,0,sizeof(g));
  37.                 memset(bz,0,sizeof(bz));
  38.                 memset(d,0,sizeof(d));
  39.                 for(int i=0;i<m;i++)
  40.                 {
  41.                         cin>>a>>b;
  42.                         g[a][b]=g[b][a]=1;
  43.                 }
  44.                 ans=0;
  45.                 for(int i=1;i<=n;i++)
  46.                 {       
  47.                         dfs(n,0,i,i);
  48.                 }
  49.                 if( (n-ans)%2 == 1)ans++;
  50.                 cout<<ans<<endl;
  51.         }
  52.         return 0;
  53. }
复制代码
算法:看有多少个人数为奇数的环,有多少个就要减去多少人,最后看剩下的是奇数还是偶数,奇数的话还要再减去一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-2-2 12:08:18 | 显示全部楼层
自己顶一个
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-2 14:29:01 | 显示全部楼层
本帖最后由 wangyexin 于 2013-2-2 14:33 编辑

如果一个人和2个人有矛盾 那么这个人就不能参加
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-2 14:52:15 | 显示全部楼层
  1. #include <iostream>
  2. using namespace std;

  3. int d[200],g[200][200];

  4. int main()
  5. {
  6.         int n,m,a,b;
  7.         while(cin>>n>>m)
  8.         {
  9.                 memset(d,0,sizeof(d));
  10.                 memset(g,0,sizeof(g));
  11.                 for(int i=0;i<m;i++)
  12.                 {
  13.                         cin>>a>>b;
  14.                         d[a]++;
  15.                         d[b]++;
  16.                         g[a][b]=g[b][a]=1;
  17.                 }
  18.                 int s=0;
  19.                 for(int i=1;i<=m;i++)
  20.                 {
  21.                         if(d[i]==2)
  22.                         {
  23.                                 for(int j=1;j<=m;j++)
  24.                                 {
  25.                                         if(g[i][j]==1)
  26.                                         {
  27.                                                 g[j][i]=0;       
  28.                                                 d[j]--;
  29.                                         }
  30.                                 }       
  31.                                 s++;
  32.                         }       
  33.                 }
  34.                 cout<<s<<endl;
  35.         }
  36.         return 0;
  37. }
复制代码
试试这个代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-2 14:54:21 | 显示全部楼层
顶一下,数据结构太难了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-2 17:11:38 | 显示全部楼层
再顶一下!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-2 17:17:32 | 显示全部楼层
赚点鱼币,多谢了

评分

参与人数 2荣誉 -2 鱼币 -1 收起 理由
牡丹花下死做鬼 -1 请不要无意义灌水!
Gw_love_VC. -2 请不要无意义灌水!

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-2-2 19:54:38 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-2 22:22:25 | 显示全部楼层
wangyexin 发表于 2013-2-2 14:52
试试这个代码

有错误       !!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-2-3 10:56:31 | 显示全部楼层
本帖最后由 Gw_love_VC. 于 2013-2-3 11:10 编辑
wangyexin 发表于 2013-2-2 14:52
试试这个代码
  1. for(int i=1;i<=m;i++)
  2.                 {
  3.                         if(d[i]==2)
  4.                         {
  5.                                 for(int j=1;j<=m;j++)
  6.                                 {
  7.                                         if(g[i][j]==1)
  8.                                         {
  9.                                                 g[j][i]=0;        
  10.                                                 d[j]--;//这里我明白 ,不明白d数组是干什么的
  11.                                         }
  12.                                 }        
  13.                                 s++;
  14.                         }        
  15.                 }
复制代码
大哥能不能
加点解释  看不太懂还有 想问问 什么时候用邻接矩阵什么时候用邻接表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-2-3 10:56:55 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-2-2 22:22
有错误       !!

求高见
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-3 11:26:56 | 显示全部楼层

什么啊   我是初学者  啊 只不过把你的代码复制下来在在编译是显示 有 错误  我有看不出来 拿错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-2-3 11:29:05 | 显示全部楼层
牡丹花下死做鬼 发表于 2013-2-3 11:26
什么啊   我是初学者  啊 只不过把你的代码复制下来在在编译是显示 有 错误  我有看不出来 拿错了

不是我写的   我的VS2008能通过  不过OJ还这是通不过
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-3 13:25:34 | 显示全部楼层
Gw_love_VC. 发表于 2013-2-3 11:29
不是我写的   我的VS2008能通过  不过OJ还这是通不过

OJ编译错误还是WA?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-3 13:28:38 | 显示全部楼层
Gw_love_VC. 发表于 2013-2-3 10:56
大哥能不能
加点解释  看不太懂还有 想问问 什么时候用邻接矩阵什么时候用邻接表

个人感觉邻接矩阵比邻接表编码简单,只要能时间复杂度符合要求就用邻接矩阵,如果还要优化就考虑邻接表
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-2-3 13:44:05 | 显示全部楼层
编译错误是memset没头文件
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-9-18 16:49:45 | 显示全部楼层
我是来领鱼币的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-19 23:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表