首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

小弟我只能自己哭了【hdu4751】

2013-09-24 
我只能自己哭了【hdu4751】我真的只能自己哭了。 本来最近在搞图论,上一场网赛本来判桥那个就应该是我的菜,可

我只能自己哭了【hdu4751】

我真的只能自己哭了。

 

本来最近在搞图论,上一场网赛本来判桥那个就应该是我的菜,可却因为平时判桥的代码没搞,结果找模板用不好。

上一场那个学长过了。      不过前面的确是耗掉了太多罚时。

 

这一场我先看的那个异或+貌似线段树那个,没有思路。换。

期间xl过了两题。 ORZ。。。。

 

然后看1004WA了好几发,我考虑了一会就敲完了2-SAT的代码,可任何测试数据都是YES。。。

我一起渴望着自己亲手过掉题。。     也别让自己每次都这么沉默般的打酱油。

好久没这么激动的敲代码了,就像考试时终于想出一道题的思路一样。。

tmd忽然又想起自己以前出现过的类似的考试状态。     心跳加速。。

最终这题还是没能由我切掉。   果然我又悲剧般的打酱油了。。。

 

烦躁的心情+杂乱的环境,我也不想再呆。

 

N久后到现在。

 

我实在是无奈了。   输出match结果全为0。   无奈中的无奈后N久。

我按步调试,最后tm发现我的solve直接退出。 WOCAO!

 

尼玛全局变量和局部变量重了

 

改了之后速A了。。。。

 

 

哎,忽然又想开了。

至少我会记得这样的错误。  一开始读入的那些数据最好都设了全局变量。

感觉图论、计算几何或者数论的一部分,的确应该是我的菜。  

尽管我同时也领悟了,自己必须多加复习才能掌握。   比如让我现在再敲个spfa,也许说不定又会有点麻烦。。。  要是敲个线段树,说不定还会有大麻烦。。。

 

本来想速切道题炫耀一番,无奈我又该沉默了。    就这样当一个沉默者吧。  但不在沉默中死去。

附个代码:

学长们还有一个思路,  补图+二分判定。

 

#include <iostream>#include <cstdio>#include <vector>#include <cstring>#include <algorithm>#include <set>using namespace std;#define clr(x,y) memset(x,y,sizeof(x))const int maxn = 1500;int n,m;vector<int> G[maxn*3];bool mark[maxn*3];int s[maxn*3],c;char op[10];int map[105][105];int visit[105];bool dfs(int x){    if(mark[x^1]) return false;//这个一定是强连通分量果然    if(mark[x]) return true;    mark[x]=true;    s[c++]=x;    for(int i=0;i<G[x].size();i++)        if(!dfs(G[x][i])) return false;    return true;}void init(){    for(int i=0;i<n*2;i++)  G[i].clear();    memset(mark,0,sizeof(mark));}bool solve(){    for(int i = 0;i < n*2; i += 2)    {      if( !mark[i] && !mark[i+1] )      {          c = 0;          if( !dfs(i) )          {              while(c>0)                mark[s[--c]]=false;              if(!dfs(i+1)) return false;          }      }    }    return true;}int main(){    int num;    while(scanf("%d", &n) != EOF)    {       clr(map, 0);       for(int i = 0;i < n;i++)       {           while(true)           {              scanf("%d", &num);              if(!num) break;              else              {                  num--;                  map[i][num] = 1;              }           }       }       init();       for(int i = 0;i < n;i++)       {         clr(visit, 0);         for(int j = 0;j < n;j++)           {               if(i != j)               {                   if(map[i][j] && map[j][i])                      visit[j] = 1;               }           }         for(int j = 0;j < n;j++) if(!visit[j] && i != j)          {             G[i*2].push_back(j*2+1);             G[i*2+1].push_back(j*2);          }       }      if(solve())      {          printf("YES\n");      }      else printf("NO\n");    }    return 0;}


 

热点排行