题意:n个字符串的大小关系,判断是否合理
分析:判断是否为有向无环图,dfs
#include <bits/stdc++.h>
#include <vector>
#define ll long long
using namespace std;
#define inf 0x3f3f3f3f
int n,vis[20010],flag=0;
char a[10010],b[10010],c[10010];
map<string,int>ma;
vector<int>v[200010];
void dfs(int x)
{
vis[x]=-1;
if(flag)
return;
for(int i=0;i<v[x].size();i++)
{
int now=v[x][i];
if(vis[now]==-1)
{
flag=1;
return;
}
if(!vis[now])
dfs(now);
}
vis[x]=1;
}
int main()
{
scanf("%d",&n);
int num=1;
for(int i=0;i<n;i++)
{
scanf("%s%s%s",a,b,c);
if(!ma[a])ma[a]=num++;
if(!ma[c])ma[c]=num++;
if(b[0]=='>')
v[ma[a]].push_back(ma[c]);
else
v[ma[c]].push_back(ma[a]);
}
for(int i=1;i<num&&flag==0;i++)
{
if(!vis[i])
dfs(i);
}
if(flag)
printf("impossible\n");
else
printf("possible\n");
return 0;
}