zoukankan      html  css  js  c++  java
  • hoj 13788 Dwarves

    //首先判环我都不会 dfs实在写的戳 后来测了好多数据发现dfs写错了 唉 其次不会哈希啊 这个哈希还是dalao手写给我的 珍惜!!!
    #include <iostream> #include <algorithm> #include <stdio.h> #include <vector> #include <string> #include <string.h> #include <queue> #include <math.h> #include <map> #define ULL unsigned long long using namespace std; const int maxn=10010; const int INF=0x3f3f3f3f; #define mod 10007 int cnt; vector <int> e[10010]; //map<ULL,int> mp; int f[10010]; int de[maxn]; int tot; bool flag=true; void dfs(int now){ f[now]=-1; for(int i=0;i<e[now].size();i++) { if(f[e[now][i]]==-1) {flag=false;} else if(f[e[now][i]]==0) dfs(e[now][i]); } f[now]=1; } const int maxbuf = 11111; struct node { ULL key; int id,next; }buf[maxbuf]; int h[maxn]; ULL fuck(char a[30]){ ULL ha=0; for(int i=0;a[i];i++){ ha*=52; ha+=a[i]; } return (ha); } void inithash() { tot = 0; memset(h,-1,sizeof(h)); } int ins(ULL key) { int now = ++tot; buf[now].key = key, buf[now].id = now, buf[now].next = h[key%mod]; h[key%mod] = now; return now; } int fnd(ULL key) { for (int i=h[key%mod];~i;i=buf[i].next) { if (buf[i].key == key) return buf[i].id; } return 0; } char s1[30],s2[30]; int main(){ #ifdef shuaishuai freopen("C:\Users\hasee\Desktop\trianglen=100000.in","r",stdin); // freopen("C:\Users\hasee\Desktop\b.txt","w",stdout); // freopen("C:\Users\hasee\Desktop\picture.in","r",stdin); #endif // ios::sync_with_stdio(false); char s; int n; memset(f,0,sizeof f); memset(de,0,sizeof de); inithash(); while(scanf("%d ",&n)!=EOF) { cnt=1; for(int i=0;i<n;i++) { // cout<<"@"<<endl; scanf("%s %c %s ",s1,&s,s2); // cout<<s1<<" "<<s<<" "<<s2<<endl; ULL x1=fuck(s1); ULL x2=fuck(s2); int u = fnd(x1), v = fnd(x2); // cout<<"before "<<u<<" "<<v<<" "<<tot<<endl; // cout<<x1<<" "<<x2<<endl; if (!u) u = ins(x1); if (!v) v = ins(x2); // printf("%s %d %s %d ",s1,u,s2,v); // cout<<u<<" "<<v<<" "<<tot<<endl; // printf("%d %d ",x1,x2); // int x1=mp[t1],x2=mp[t2]; // if(x1==0)x1=mp[t1]=cnt++; // if(x2==0)x2=mp[t2]=cnt++; if(s=='>') { e[u].push_back(v); de[v]++; } else { e[v].push_back(u); de[u]++; } } for(int i=1;i<=tot;i++ ){ if(f[i]==0) dfs(i); if(!flag) break; } if(flag) printf("possible "); else printf("impossible "); for(int i=0;i<=tot;i++)e[i].clear(),f[i]=0,h[i]=-1,de[i]=0; tot=0; } return 0; }
  • 相关阅读:
    从Oracle提供两种cube产品说开
    Sql Server DWBI的几个学习资料
    Unload Oracle data into text file
    初学Java的几个tips
    我常用的Oracle知识点汇总
    benefits by using svn
    如何在windows上使用putty来显示远端linux的桌面
    building commercial website using Microsoft tech stack
    Understand Thread and Lock
    Update google calendar by sunbird
  • 原文地址:https://www.cnblogs.com/MeowMeowMeow/p/7277017.html
Copyright © 2011-2022 走看看